In this notebook we conduct exploratory factor analyses (EFAs) on the datasets for our studies of concepts of mental life, in which each participants judged the various mental capacities of a particular target entity. We analyze datasets for adults and children from each of our five field sites: the US, Ghana, Thailand, China, and Vanuatu.

This notebook contains a supplemental analysis not presented in the main text, in which we drop participants who gave the same answer on every trial.

Adults

Samples

  country   n
       US 106
    Ghana  88
 Thailand 144
    China 120
  Vanuatu 120
    Total 578

Scale use

Factor retention: parallel analysis

Exploratory factor analysis

Factor loadings

the condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be used

Congruence

funs() is soft deprecated as of dplyr 0.8.0
Please use a list of either functions or lambdas: 

  # Simple named list: 
  list(mean = mean, median = median)

  # Auto named with `tibble::lst()`: 
  tibble::lst(mean, median)

  # Using lambdas
  list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
This warning is displayed once per session.

Bootstrapped congruence

Children

Samples

  country   n
       US 115
    Ghana 129
 Thailand 151
    China 120
  Vanuatu 128
    Total 643

Scale use

Factor retention: parallel analysis

Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
The estimated weights for the factor scores are probably incorrect.  Try a different factor score estimation method.
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  4  and the number of components =  2 
Parallel analysis suggests that the number of factors =  3  and the number of components =  2 

Exploratory factor analysis

Factor loadings

the condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be used

Congruence

See All samples, below.

Bootstrapped congruence

All samples

Congruence

the condition has length > 1 and only the first element will be usedVectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.the condition has length > 1 and only the first element will be usedVectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.the condition has length > 1 and only the first element will be usedthe condition has length > 1 and only the first element will be used

Developmental comparisons

Column `country` joining character vector and factor, coercing into character vector

Column `country` joining character vector and factor, coercing into character vector

Column `country` joining character vector and factor, coercing into character vector

Column `country` joining character vector and factor, coercing into character vector

Column `country` joining character vector and factor, coercing into character vector

Column `country` joining character vector and factor, coercing into character vector

LS0tCnRpdGxlOiAiQ29uY2VwdHMgb2YgbWVudGFsIGxpZmUgYWNyb3NzIGN1bHR1cmVzOiBTdXBwbGVtZW50YWwgYW5hbHlzaXMiCmF1dGhvcnM6ICJXZWlzbWFuLCBMZWdhcmUsICYgTHVocm1hbm4iCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQoKYGBge3Igc2V0dXB9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRiwgbWVzc2FnZSA9IEYpCmBgYAoKSW4gdGhpcyBub3RlYm9vayB3ZSBjb25kdWN0IGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNlcyAoRUZBcykgb24gdGhlIGRhdGFzZXRzIGZvciBvdXIgc3R1ZGllcyBvZiBjb25jZXB0cyBvZiBtZW50YWwgbGlmZSwgaW4gd2hpY2ggZWFjaCBwYXJ0aWNpcGFudHMganVkZ2VkIHRoZSB2YXJpb3VzIG1lbnRhbCBjYXBhY2l0aWVzIG9mIGEgcGFydGljdWxhciB0YXJnZXQgZW50aXR5LiBXZSBhbmFseXplIGRhdGFzZXRzIGZvciBhZHVsdHMgYW5kIGNoaWxkcmVuIGZyb20gZWFjaCBvZiBvdXIgZml2ZSBmaWVsZCBzaXRlczogdGhlIFVTLCBHaGFuYSwgVGhhaWxhbmQsIENoaW5hLCBhbmQgVmFudWF0dS4gCgpUaGlzIG5vdGVib29rIGNvbnRhaW5zIGEgc3VwcGxlbWVudGFsIGFuYWx5c2lzIG5vdCBwcmVzZW50ZWQgaW4gdGhlIG1haW4gdGV4dCwgaW4gd2hpY2ggd2UgZHJvcCBwYXJ0aWNpcGFudHMgd2hvIGdhdmUgdGhlIHNhbWUgYW5zd2VyIG9uIGV2ZXJ5IHRyaWFsLiAKCgpgYGB7ciwgZWNobyA9IEYsIG1lc3NhZ2UgPSBGfQpzb3VyY2UoIi4vc2NyaXB0cy9kZXBlbmRlbmNpZXMuUiIpCnNvdXJjZSgiLi9zY3JpcHRzL2N1c3RvbV9mdW5zLlIiKQpzb3VyY2UoIi4vc2NyaXB0cy92YXJfcmVjb2RlX2NvbnRyYXN0LlIiKQpgYGAKCmBgYHtyfQojIGZ1bmN0aW9uIGZvciBlbGltaW50YWludCBwYXJ0aWNpcGFudHMgd2hvIGdhdmUgdGhlIHNhbWUgYW5zd2VyIG9uIGV2ZXJ5IHRyaWFsCmRldGVjdF9ub192YXJfZnVuIDwtIGZ1bmN0aW9uKGRmLCByZW1vdmVfbmEgPSBUKSB7CiAgCiAgZF9pZCA8LSBkZiAKICAKICBpZiAocmVtb3ZlX25hKSB7IGRfaWQgPC0gZF9pZCAlPiUgZmlsdGVyKCFpcy5uYShyZXNwb25zZSkpIH0KICAKICBkX2lkIDwtIGRfaWQgJT4lCiAgICBkaXN0aW5jdChzdWJqX2lkLCByZXNwb25zZSkgJT4lCiAgICBjb3VudChzdWJqX2lkKSAlPiUKICAgIGZpbHRlcihuID09IDEpCiAgCiAgZF9yZXMgPC0gZGYgJT4lCiAgICBmaWx0ZXIoIXN1YmpfaWQgJWluJSBkX2lkJHN1YmpfaWQpCiAgCiAgcmV0dXJuKGRfcmVzKQp9CmBgYAoKYGBge3IgZGF0YX0KIyByZWFkIGluIGRhdGEsIHNob3J0ZW4gImZlZWwgc2ljaywiIGFuZCBsaW1pdCB0byB1bml2ZXJzYWwgdGFyZ2V0cyBhbmQgcXVlc3Rpb25zOiBhZHVsdHMKZF91c19hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF91c19hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF9naF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF9naF9hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF90aF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF90aF9hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF9jaF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF9jaF9hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF92dF9hZHVsdHMgPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF92dF9hZHVsdHMuY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKCiMgcmVhZCBpbiBkYXRhLCBzaG9ydGVuICJmZWVsIHNpY2ssIiBhbmQgbGltaXQgdG8gdW5pdmVyc2FsIHRhcmdldHMgYW5kIHF1ZXN0aW9uczogY2hpbGRyZW4KZF91c19jaGlsZHJlbiA8LSByZWFkX2NzdigiLi4vZGF0YS9kX3VzX2NoaWxkcmVuLmNzdiIpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKSAlPiUKICBkZXRlY3Rfbm9fdmFyX2Z1bigpCmRfZ2hfY2hpbGRyZW4gPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF9naF9jaGlsZHJlbi5jc3YiKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkgJT4lCiAgZGV0ZWN0X25vX3Zhcl9mdW4oKQojIGRfZ2hfZW5nX2NoaWxkcmVuIDwtIHJlYWRfY3N2KCIuLi9kYXRhL2RfZ2hfZW5nX2NoaWxkcmVuLmNzdiIpICU+JQojICAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKIyAgIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkgJT4lCiAgIyBkZXRlY3Rfbm9fdmFyX2Z1bigpCmRfdGhfY2hpbGRyZW4gPC0gcmVhZF9jc3YoIi4uL2RhdGEvZF90aF9jaGlsZHJlbi5jc3YiKSAlPiUKICBmaWx0ZXIodGFyZ2V0ICVpbiUgbGV2ZWxzX3RhcmdldF91bml2LCBxdWVzdGlvbl9jYXQgPT0gInVuaXZlcnNhbCIpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGdzdWIoIlxcLCAuKiQiLCAiIFxcWy4uLlxcXSIsIHF1ZXN0aW9uKSkgJT4lCiAgZGV0ZWN0X25vX3Zhcl9mdW4oKQpkX2NoX2NoaWxkcmVuIDwtIHJlYWRfY3N2KCIuLi9kYXRhL2RfY2hfY2hpbGRyZW4uY3N2IikgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGxldmVsc190YXJnZXRfdW5pdiwgcXVlc3Rpb25fY2F0ID09ICJ1bml2ZXJzYWwiKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJcXCwgLiokIiwgIiBcXFsuLi5cXF0iLCBxdWVzdGlvbikpICU+JQogIGRldGVjdF9ub192YXJfZnVuKCkKZF92dF9jaGlsZHJlbiA8LSByZWFkX2NzdigiLi4vZGF0YS9kX3Z0X2NoaWxkcmVuLmNzdiIpICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBsZXZlbHNfdGFyZ2V0X3VuaXYsIHF1ZXN0aW9uX2NhdCA9PSAidW5pdmVyc2FsIikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gZ3N1YigiXFwsIC4qJCIsICIgXFxbLi4uXFxdIiwgcXVlc3Rpb24pKSAlPiUKICAjIGZpbHRlciBvdXQgcGFydGljaXBhbnRzIG91dHNpZGUgb2YgdGhlIGFnZSByYW5nZQogIGZpbHRlcigoYWdlID49IDYgJiBhZ2UgPD0gMTIpIHwgaXMubmEoYWdlKSkgJT4lCiAgZGV0ZWN0X25vX3Zhcl9mdW4oKQpgYGAKCmBgYHtyIHdpZGV9CiMgbWFrZSB3aWRlLWZvcm0gZGF0YXNldHMgZm9yIEVGQTogYWR1bHRzCmRfdXNfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF91c19hZHVsdHMpCmRfZ2hfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF9naF9hZHVsdHMpCmRfdGhfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF90aF9hZHVsdHMpCmRfY2hfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF9jaF9hZHVsdHMpCmRfdnRfYWR1bHRzX3cgPC0gd2lkZV9kZl9mdW4oZF92dF9hZHVsdHMpCgojIG1ha2Ugd2lkZS1mb3JtIGRhdGFzZXRzIGZvciBFRkE6IGNoaWxkcmVuCmRfdXNfY2hpbGRyZW5fdyA8LSB3aWRlX2RmX2Z1bihkX3VzX2NoaWxkcmVuKQpkX2doX2NoaWxkcmVuX3cgPC0gd2lkZV9kZl9mdW4oZF9naF9jaGlsZHJlbikKIyBkX2doX2VuZ19jaGlsZHJlbl93IDwtIHdpZGVfZGZfZnVuKGRfZ2hfZW5nX2NoaWxkcmVuKQpkX3RoX2NoaWxkcmVuX3cgPC0gd2lkZV9kZl9mdW4oZF90aF9jaGlsZHJlbikKZF9jaF9jaGlsZHJlbl93IDwtIHdpZGVfZGZfZnVuKGRfY2hfY2hpbGRyZW4pCmRfdnRfY2hpbGRyZW5fdyA8LSB3aWRlX2RmX2Z1bihkX3Z0X2NoaWxkcmVuKQpgYGAKCgojIEFkdWx0cwoKIyMgU2FtcGxlcwoKYGBge3Igc2FtcGxlcyBhZHVsdHN9CmJpbmRfcm93cyhkX3VzX2FkdWx0cywgZF9naF9hZHVsdHMsIGRfdGhfYWR1bHRzLCBkX2NoX2FkdWx0cywgZF92dF9hZHVsdHMpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGxldmVscyA9IGxldmVsc19jb3VudHJ5KSkgJT4lCiAgZGlzdGluY3QoY291bnRyeSwgc3Vial9pZCkgJT4lCiAgY291bnQoY291bnRyeSkgJT4lCiAgamFuaXRvcjo6YWRvcm5fdG90YWxzKCkKYGBgCgojIyBTY2FsZSB1c2UKCmBgYHtyIHNjYWxlIHVzZSBtZWFuIG92ZXJhbGwgYWR1bHRzfQpiaW5kX3Jvd3MoZF91c19hZHVsdHMsIGRfZ2hfYWR1bHRzLCBkX3RoX2FkdWx0cywgZF9jaF9hZHVsdHMsIGRfdnRfYWR1bHRzKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSksCiAgICAgICAgIHJlc3BvbnNlX2NhdCA9IHJlY29kZV9mYWN0b3IocmVzcG9uc2VfY2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyIgPSAibm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJraW5kIG9mIiA9ICJraW5kIG9mIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieWVzIiA9ICJ5ZXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWlzc2luZyA9ICJtaXNzaW5nIGRhdGEiKSkgJT4lCiAgY291bnQoY291bnRyeSwgcmVzcG9uc2VfY2F0KSAlPiUKICBjb21wbGV0ZShyZXNwb25zZV9jYXQsIG5lc3RpbmcoY291bnRyeSksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1uKSAlPiUKICBzcHJlYWQocmVzcG9uc2VfY2F0LCBwcm9wKSAlPiUKICBqYW5pdG9yOjphZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAyKQpgYGAKCiMjIEZhY3RvciByZXRlbnRpb246IHBhcmFsbGVsIGFuYWx5c2lzCgpgYGB7ciBwYXJhbGxlbCBkaXN0IGFkdWx0cywgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNX0KIyBOT1RFOiB0aGVyZSBhcHBlYXJzIHRvIGJlIHNvbWUgdW5yZWxpYWJpbGl0eS9ub24tcmVwcm9kdWNpYmlsaXR5IGluIHJlc3VsdHMsIGVzcGVjaWFsbHkgZm9yIHZ0IGFkdWx0cywgd2hpY2ggSSBkb24ndCB1bmRlcnN0YW5kIC0tIHNvIGhlcmUncyB0aGUgZGlzdHJpYnV0aW9uIG92ZXIgb3V0Y29tZXMgb2YgcGFyYWxsZWwgYW5hbHlzaXMgd2l0aCAxMDAgaXRlcmF0aW9ucy4gV2UnbGwgY2hvb3NlIHRoZSBtZWRpYW4gbnVtYmVyIG9mIGZhY3RvcnMuCgppZiAoZmlsZS5leGlzdHMoIi4uL3Jlc3VsdHMvcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHNfZHJvcF9zdWJqZWN0cy5SRFMiKSkgewogIAogIHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzIDwtIHJlYWRSRFMoIi4uL3Jlc3VsdHMvcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHNfZHJvcF9zdWJqZWN0cy5SRFMiKQogIAp9IGVsc2UgewogIAogIHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzIDwtIGRhdGEuZnJhbWUodXMgPSBOVUxMLCBnaCA9IE5VTEwsIHRoID0gTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gTlVMTCwgdnQgPSBOVUxMKQogIAogIHNldC5zZWVkKDU0MzIxKQogIG5fY29yZXMgPC0gcGFyYWxsZWw6OmRldGVjdENvcmVzKCkKICBvcHRpb25zKG1jLmNvcmVzID0gbl9jb3JlcykKICAKICBmb3IgKGkgaW4gMToxMDApIHsKICAgIHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzW2ksICJ1cyJdIDwtIGZhLnBhcmFsbGVsKGRfdXNfYWR1bHRzX3csIHBsb3QgPSBGKSRuZmFjdAogICAgcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHNbaSwgImdoIl0gPC0gZmEucGFyYWxsZWwoZF9naF9hZHVsdHNfdywgcGxvdCA9IEYpJG5mYWN0ICAgICAKICAgIHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzW2ksICJ0aCJdIDwtIGZhLnBhcmFsbGVsKGRfdGhfYWR1bHRzX3csIHBsb3QgPSBGKSRuZmFjdAogICAgcGFfb3V0Y29tZXNfZGlzdF9hZHVsdHNbaSwgImNoIl0gPC0gZmEucGFyYWxsZWwoZF9jaF9hZHVsdHNfdywgcGxvdCA9IEYpJG5mYWN0CiAgICBwYV9vdXRjb21lc19kaXN0X2FkdWx0c1tpLCAidnQiXSA8LSBmYS5wYXJhbGxlbChkX3Z0X2FkdWx0c193LCBwbG90ID0gRikkbmZhY3QKICB9CiAgCiAgc2F2ZVJEUyhwYV9vdXRjb21lc19kaXN0X2FkdWx0cywgZmlsZSA9ICIuLi9yZXN1bHRzL3BhX291dGNvbWVzX2Rpc3RfYWR1bHRzX2Ryb3Bfc3ViamVjdHMuUkRTIikKfQoKIyBwbG90CnBhX291dGNvbWVzX2Rpc3RfYWR1bHRzICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiaXRlciIpICU+JQogIGdhdGhlcihjb3VudHJ5LCBuZmFjdCwgLWl0ZXIpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdncGxvdChhZXMoeCA9IG5mYWN0KSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5KSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygxLCBtYXgocGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMpICsgMSksCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgwLCAxMDAsIDEpKSArCiAgbGFicyh4ID0gIk51bWJlciBvZiBmYWN0b3JzIHN1Z2dlc3RlZCBieSBmYS5wYXJhbGxlbCgpIikKYGBgCgojIyBFeHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMKCmBgYHtyIGVmYSBhZHVsdHN9CnNldC5zZWVkKDU0MzIxKQoKIyBkbyBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXM6IGFkdWx0cwplZmFfdXNfYWR1bHRzIDwtIGZhX2Z1bihkX3VzX2FkdWx0c193LCBuID0gbWVkaWFuKHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzJHVzKSkKY29sbmFtZXMoZWZhX3VzX2FkdWx0cyRsb2FkaW5ncykgPC0gcGFzdGUwKCJ1c0FEVUxUU18iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV91c19hZHVsdHMkbG9hZGluZ3MpKQoKZWZhX2doX2FkdWx0cyA8LSBmYV9mdW4oZF9naF9hZHVsdHNfdywgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2FkdWx0cyRnaCkpCmNvbG5hbWVzKGVmYV9naF9hZHVsdHMkbG9hZGluZ3MpIDwtIHBhc3RlMCgiZ2hBRFVMVFNfIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfZ2hfYWR1bHRzJGxvYWRpbmdzKSkKCmVmYV90aF9hZHVsdHMgPC0gZmFfZnVuKGRfdGhfYWR1bHRzX3csIG4gPSBtZWRpYW4ocGFfb3V0Y29tZXNfZGlzdF9hZHVsdHMkdGgpKQpjb2xuYW1lcyhlZmFfdGhfYWR1bHRzJGxvYWRpbmdzKSA8LSBwYXN0ZTAoInRoQURVTFRTXyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3RoX2FkdWx0cyRsb2FkaW5ncykpCgplZmFfY2hfYWR1bHRzIDwtIGZhX2Z1bihkX2NoX2FkdWx0c193LCBuID0gbWVkaWFuKHBhX291dGNvbWVzX2Rpc3RfYWR1bHRzJGNoKSkKY29sbmFtZXMoZWZhX2NoX2FkdWx0cyRsb2FkaW5ncykgPC0gcGFzdGUwKCJjaEFEVUxUU18iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9jaF9hZHVsdHMkbG9hZGluZ3MpKQoKZWZhX3Z0X2FkdWx0cyA8LSBmYV9mdW4oZF92dF9hZHVsdHNfdywgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2FkdWx0cyR2dCkpCmNvbG5hbWVzKGVmYV92dF9hZHVsdHMkbG9hZGluZ3MpIDwtIHBhc3RlMCgidnRBRFVMVFNfIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfdnRfYWR1bHRzJGxvYWRpbmdzKSkKYGBgCgpgYGB7ciBmYWN0b3IgbmFtZXMgYWR1bHRzfQpmYWN0b3JfbmFtZXNfYWR1bHRzIDwtIGRhdGEuZnJhbWUoZmFjdG9yID0gYyhjb2xuYW1lcyhlZmFfdXNfYWR1bHRzJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX2doX2FkdWx0cyRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV90aF9hZHVsdHMkbG9hZGluZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfY2hfYWR1bHRzJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3Z0X2FkdWx0cyRsb2FkaW5ncykpKSAlPiUKICBtdXRhdGUoYWdlX2dyb3VwID0gImFkdWx0cyIpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gY2FzZV93aGVuKGdyZXBsKCJedXMiLCBmYWN0b3IpIH4gIlVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiXmdoIiwgZmFjdG9yKSB+ICJHaGFuYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl50aCIsIGZhY3RvcikgfiAiVGhhaWxhbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJeY2giLCBmYWN0b3IpIH4gIkNoaW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiXnZ0IiwgZmFjdG9yKSB+ICJWYW51YXR1IiksCiAgICAgICAgIGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzX2NvdW50cnkpKSAlPiUKICBtdXRhdGUoZmFjdG9yX25hbWUgPSBnc3ViKCJedXMiLCAiVVMgIiwgZmFjdG9yKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJeZ2giLCAiR2guICIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJedGgiLCAiVGguICIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJeY2giLCAiQ2guICIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJednQiLCAiVmEuICIsIGZhY3Rvcl9uYW1lKSwKICAgICAgICAgZmFjdG9yX25hbWUgPSBnc3ViKCJBRFVMVFMiLCAiYWR1bHRzIiwgZmFjdG9yX25hbWUpLAogICAgICAgICBmYWN0b3JfbmFtZSA9IGdzdWIoIl9GIiwgIiBGYWN0b3IgIiwgZmFjdG9yX25hbWUpKSAlPiUKICBtdXRhdGUoZmFjdG9yX2Rlc2NyaXB0ID0gcmVjb2RlKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzQURVTFRTX0YxID0gIkJvZHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNBRFVMVFNfRjIgPSAiSGVhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNBRFVMVFNfRjMgPSAiTWluZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaEFEVUxUU19GMSA9ICJJbm5lciBzcGhlcmUgKG1pbmQtbGlrZSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2hBRFVMVFNfRjIgPSAiQm9keS1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2hBRFVMVFNfRjMgPSAiSW50ZXJwZXJzb25hbCwgcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoQURVTFRTX0YxID0gIkJvZHktbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aEFEVUxUU19GMiA9ICJIZWFydC1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoQURVTFRTX0YzID0gIk1pbmQtbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaEFEVUxUU19GMSA9ICJCb2R5LWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hBRFVMVFNfRjIgPSAiSGVhcnQtbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaEFEVUxUU19GMyA9ICJNaW5kLWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRBRFVMVFNfRjIgPSAiSGFybW9ueSAobWluZC1saWtlLCBoZWFydC1saWtlKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dEFEVUxUU19GMSA9ICJTaW4gKGJvZHktbGlrZSkiKSwKICAgICAgICAgZmFjdG9yX2xhYmRlc2NyaXB0ID0gcGFzdGUoZ3N1YigiLipfRiIsICJGIiwgZmFjdG9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX2Rlc2NyaXB0LCBzZXAgPSAiOiAiKSkKYGBgCgojIyBGYWN0b3IgbG9hZGluZ3MKCmBgYHtyIG9yZGVyIGFkdWx0c30KIyBvcmRlciBjYXBhY2l0aWVzOiBhZHVsdHMKb3JkZXJfdXNfYWR1bHRzIDwtIGZhLnNvcnQoZWZhX3VzX2FkdWx0cykkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpvcmRlcl9naF9hZHVsdHMgPC0gZmEuc29ydChlZmFfZ2hfYWR1bHRzKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCm9yZGVyX3RoX2FkdWx0cyA8LSBmYS5zb3J0KGVmYV90aF9hZHVsdHMpJGxvYWRpbmdzW10gJT4lIHJvd25hbWVzKCkKb3JkZXJfY2hfYWR1bHRzIDwtIGZhLnNvcnQoZWZhX2NoX2FkdWx0cykkbG9hZGluZ3NbXSAlPiUgcm93bmFtZXMoKQpvcmRlcl92dF9hZHVsdHMgPC0gZmEuc29ydChlZmFfdnRfYWR1bHRzKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpCmBgYAoKYGBge3IgbG9hZGluZ3MgYWR1bHRzfQojIGNvbXBpbGUgbG9hZGluZ3M6IGFkdWx0cwpsb2FkaW5nc19hZHVsdHMgPC0gYmluZF9yb3dzKAogIGxvYWRpbmdzX2Z1bihlZmFfdXNfYWR1bHRzKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiVVMiKSwKICBsb2FkaW5nc19mdW4oZWZhX2doX2FkdWx0cykgJT4lIG11dGF0ZShjb3VudHJ5ID0gIkdoYW5hIiksCiAgbG9hZGluZ3NfZnVuKGVmYV90aF9hZHVsdHMpICU+JSBtdXRhdGUoY291bnRyeSA9ICJUaGFpbGFuZCIpLAogIGxvYWRpbmdzX2Z1bihlZmFfY2hfYWR1bHRzKSAlPiUgbXV0YXRlKGNvdW50cnkgPSAiQ2hpbmEiKSwKICBsb2FkaW5nc19mdW4oZWZhX3Z0X2FkdWx0cykgJT4lIG11dGF0ZShjb3VudHJ5ID0gIlZhbnVhdHUiKSkgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpLAogICAgICAgICBjYXBhY2l0eV9vcmRfdXMgPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX3VzX2FkdWx0cyksCiAgICAgICAgIGNhcGFjaXR5X29yZF9naCA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfZ2hfYWR1bHRzKSwKICAgICAgICAgY2FwYWNpdHlfb3JkX3RoID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBvcmRlcl90aF9hZHVsdHMpLAogICAgICAgICBjYXBhY2l0eV9vcmRfY2ggPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX2NoX2FkdWx0cyksCiAgICAgICAgIGNhcGFjaXR5X29yZF92dCA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfdnRfYWR1bHRzKSkgJT4lCiAgYXJyYW5nZShjb3VudHJ5LCBmYWN0b3IsIGRlc2MoYWJzKGxvYWRpbmcpKSwgY2FwYWNpdHkpICU+JQogIG11dGF0ZShvcmRlciA9IDE6bnJvdyguKSkgJT4lCiAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMpCmBgYAoKYGBge3IgaGVhdG1hcHMgYnkgc2l0ZSBhZHVsdHMsIGZpZy53aWR0aCA9IDE1LCBmaWcuYXNwID0gMC4yNX0KcGxvdF9ncmlkKGhlYXRtYXBfZnVuKGVmYV91c19hZHVsdHMsIAogICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGNvdW50cnkgPT0gIlVTIikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChmYWN0b3JfbGFiZGVzY3JpcHQpICU+JQogICAgICAgICAgICAgICAgICAgICAgICB1bmxpc3QoKSkgKyAKICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICAgICAgICAgIGxhYnModGl0bGUgPSAiVVM6IGFkdWx0cyIpLAogICAgICAgICAgaGVhdG1hcF9mdW4oZWZhX2doX2FkdWx0cywKICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJHaGFuYSIpICU+JQogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoZmFjdG9yX2xhYmRlc2NyaXB0KSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgdW5saXN0KCkpICsgCiAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogICAgICAgICAgICBsYWJzKHRpdGxlID0gIkdIQU5BOiBhZHVsdHMiKSwKICAgICAgICAgIGhlYXRtYXBfZnVuKGVmYV90aF9hZHVsdHMsCiAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfYWR1bHRzICU+JQogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVGhhaWxhbmQiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KGZhY3Rvcl9sYWJkZXNjcmlwdCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHVubGlzdCgpKSArIAogICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICAgICAgICAgICAgbGFicyh0aXRsZSA9ICJUSEFJTEFORDogYWR1bHRzIiksCiAgICAgICAgICBoZWF0bWFwX2Z1bihlZmFfY2hfYWR1bHRzLAogICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGNvdW50cnkgPT0gIkNoaW5hIikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChmYWN0b3JfbGFiZGVzY3JpcHQpICU+JQogICAgICAgICAgICAgICAgICAgICAgICB1bmxpc3QoKSkgKyAKICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICAgICAgICAgIGxhYnModGl0bGUgPSAiQ0hJTkE6IGFkdWx0cyIpLAogICAgICAgICAgaGVhdG1hcF9mdW4oZWZhX3Z0X2FkdWx0cywKICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJWYW51YXR1IikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChmYWN0b3JfbGFiZGVzY3JpcHQpICU+JQogICAgICAgICAgICAgICAgICAgICAgICB1bmxpc3QoKSkgKyAKICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICAgICAgICAgIGxhYnModGl0bGUgPSAiVkFOVUFUVTogYWR1bHRzIiksCiAgICAgICAgICBuY29sID0gNSkKYGBgCgpgYGB7ciBoZWF0bWFwIGFkdWx0cywgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KIyBtYWtlIGhlYXRtYXAgZmlndXJlOiBhZHVsdHMKbG9hZGluZ3NfYWR1bHRzICU+JQogIG11dGF0ZShmYWN0b3JfbnVtID0gYXMubnVtZXJpYyhnc3ViKCIuKkYiLCAiIiwgZmFjdG9yKSkpICU+JQogIG11dGF0ZShzYW1wbGUgPSBwYXN0ZShjb3VudHJ5LCAiYWR1bHRzIiwgc2VwID0gIlxuIikpICU+JQogIGxlZnRfam9pbihmYWN0b3JfbmFtZXNfYWR1bHRzKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoZmFjdG9yX2xhYmRlc2NyaXB0LCBmYWN0b3JfbnVtKSwgCiAgICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfdXMpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX2VjKSksIAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfZ2gpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX3RoKSksCiAgICAgICAgICAgICAjIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKGNhcGFjaXR5X29yZF9jaCkpLAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfdnQpKSwKICAgICAgICAgICAgIGZpbGwgPSBsb2FkaW5nKSkgKwogIGZhY2V0X2dyaWQofiByZW9yZGVyKHNhbXBsZSwgYXMubnVtZXJpYyhjb3VudHJ5KSksIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4yKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMikpLCBzaXplID0gMykgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAyMCwgYmFyd2lkdGggPSAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgcGFuZWwuc3BhY2luZy54ID0gdW5pdCgwLjgsICJsaW5lcyIpLAogICAgICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGZhY2UgPSAiYm9sZCIpKSArCiAgbGFicyh4ID0gTlVMTCwgeSA9ICJDYXBhY2l0eSIsIGZpbGwgPSAiRmFjdG9yXG5sb2FkaW5nIikKYGBgCgojIyBDb25ncnVlbmNlCgpgYGB7ciBjb25ncnVlbmNlIGFkdWx0c30KY29uZ19hZHVsdHMgPC0gZmEuY29uZ3J1ZW5jZSh4ID0gbGlzdChlZmFfdXNfYWR1bHRzJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9naF9hZHVsdHMkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX3RoX2FkdWx0cyRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2hfYWR1bHRzJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV92dF9hZHVsdHMkbG9hZGluZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IDUpICU+JQogICMgZ2V0X3VwcGVyX3RyaV9mdW4oKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJmYWN0b3JfQSIpICU+JQogIGdhdGhlcihmYWN0b3JfQiwgY29uZywgLWZhY3Rvcl9BKSAlPiUKICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUgCiAgICAgICAgICAgICAgcmVuYW1lX2FsbChsaXN0KH4gKHBhc3RlKC4sICJBIiwgc2VwID0gIl8iKSkpKSkgJT4lCiAgbGVmdF9qb2luKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lIAogICAgICAgICAgICAgIHJlbmFtZV9hbGwobGlzdCh+IChwYXN0ZSguLCAiQiIsIHNlcCA9ICJfIikpKSkpCmBgYAoKYGBge3IgdG9wIG1hdGNoIGFkdWx0c30KY29uZ19hZHVsdHNfdG9wX21hdGNoX0EgPC0gdG9wX21hdGNoX2Z1bihjb25nX2FkdWx0cywgImNvdW50cnlfQSIpCmNvbmdfYWR1bHRzX3RvcF9tYXRjaF9CIDwtIHRvcF9tYXRjaF9mdW4oY29uZ19hZHVsdHMsICJjb3VudHJ5X0IiKQpgYGAKCmBgYHtyIGNvbmcgYWxsIHBhaXJzIGFkdWx0cywgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KY29uZ19hZHVsdHMgJT4lCiAgbXV0YXRlX2F0KCN2YXJzKGNvbnRhaW5zKCJsYWJkZXNjcmlwdCIpKSwKICAgIHZhcnMoZmFjdG9yX2xhYmRlc2NyaXB0X0EpLAogICAgZnVucyhnc3ViKCIgXFwoIiwgIlxuXFwoIiwgLikpKSAlPiUKICBtdXRhdGVfYXQoI3ZhcnMoY29udGFpbnMoImxhYmRlc2NyaXB0IikpLAogICAgdmFycyhmYWN0b3JfbGFiZGVzY3JpcHRfQSksCiAgICBmdW5zKGdzdWIoIlxcLyIsICJcXC9cbiIsIC4pKSkgJT4lCiAgIyBsZWZ0X2pvaW4oY29uZ19hZHVsdHNfdG9wX21hdGNoX0EgJT4lIHJlbmFtZSh0b3BfbWF0Y2hfQSA9IHRvcF9tYXRjaCkpICU+JQogIGxlZnRfam9pbihjb25nX2FkdWx0c190b3BfbWF0Y2hfQiAlPiUgcmVuYW1lKHRvcF9tYXRjaF9CID0gdG9wX21hdGNoKSkgJT4lCiAgbXV0YXRlKGlzX3RvcF9tYXRjaCA9IGNhc2Vfd2hlbihmYWN0b3JfQSA9PSBmYWN0b3JfQiB+ICJib2xkLml0YWxpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZhY3Rvcl9BID09IHRvcF9tYXRjaF9BIH4gImJvbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX0IgPT0gdG9wX21hdGNoX0IgfiAiYm9sZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gInBsYWluIikpICU+JQogICMgbXV0YXRlKGNvbmcgPSBpZmVsc2UoY29uZyA9PSAxLCBOQV9yZWFsXywgY29uZykpICU+JQogIG11dGF0ZShzYW1wbGVfQSA9IHBhc3RlKHRvdXBwZXIoY291bnRyeV9BKSwgImFkdWx0cyIsIHNlcCA9ICI6XG4iKSkgJT4lCiAgbXV0YXRlKHNhbXBsZV9CID0gcGFzdGUodG91cHBlcihjb3VudHJ5X0IpLCAiYWR1bHRzIiwgc2VwID0gIjpcbiIpKSAlPiUKICBtdXRhdGVfYXQodmFycyhjb3VudHJ5X0EsIGNvdW50cnlfQiksCiAgICAgICAgICAgIGZ1bnMoZmFjdG9yKHRvdXBwZXIoLiksIGxldmVscyA9IHRvdXBwZXIobGV2ZWxzX2NvdW50cnkpKSkpICU+JQogIGdncGxvdChhZXMoeCA9IGZhY3Rvcl9sYWJkZXNjcmlwdF9BLAogICAgICAgICAgICAgeSA9IHJlb3JkZXIoZmFjdG9yX2xhYmRlc2NyaXB0X0IsIGRlc2MoZmFjdG9yX2xhYmRlc2NyaXB0X0IpKSwKICAgICAgICAgICAgIGZpbGwgPSBjb25nKSkgKwogIGZhY2V0X2dyaWQocmVvcmRlcihzYW1wbGVfQiwgYXMubnVtZXJpYyhjb3VudHJ5X0IpKSB+IAogICAgICAgICAgICAgICByZW9yZGVyKHNhbXBsZV9BLCBhcy5udW1lcmljKGNvdW50cnlfQSkpLCAKICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4yKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNhc2Vfd2hlbihpcy5uYShjb25nKSB+ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGZvcm1hdChyb3VuZChjb25nLCAyKSwgbnNtYWxsID0gMikpLAogICAgICAgICAgICAgICAgZm9udGZhY2UgPSBpc190b3BfbWF0Y2gsCiAgICAgICAgICAgICAgICBjb2xvciA9IGlzX3RvcF9tYXRjaCksCiAgICAgICAgICAgIHNpemUgPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZGFya3JlZCIsICJkYXJrYmx1ZSIsICJibGFjayIpKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzX2Mob3B0aW9uID0gInZpcmlkaXMiLCAKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcndpZHRoID0gMjUsIGJhcmhlaWdodCA9IDAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgZmFjZSA9ICJib2xkIikpICsKICBsYWJzKHggPSBOVUxMLCB5ID0gTlVMTCwgZmlsbCA9IGV4cHJlc3Npb24oaXRhbGljKHJbY10pKSkKYGBgCgojIyBCb290c3RyYXBwZWQgY29uZ3J1ZW5jZQoKYGBge3IgYm9vdHN0cmFwIGNvbmdydWVuY2UgYWR1bHRzfQppZiAoZmlsZS5leGlzdHMoIi4uL3Jlc3VsdHMvY29uZ19kZl9hZHVsdHNfZHJvcF9zdWJqZWN0cy5SRFMiKSkgewogIAogIGNvbmdfZGZfYWR1bHRzIDwtIHJlYWRSRFMoIi4uL3Jlc3VsdHMvY29uZ19kZl9hZHVsdHNfZHJvcF9zdWJqZWN0cy5SRFMiKQogIAp9IGVsc2UgewogIAogIGJzX2FkdWx0cyA8LSBsb2FkaW5nc19hZHVsdHMgJT4lCiAgICBzZWxlY3QoY2FwYWNpdHksIGZhY3RvciwgbG9hZGluZykgJT4lCiAgICBzcHJlYWQoZmFjdG9yLCBsb2FkaW5nKSAlPiUKICAgIHNlbGVjdCgtY2FwYWNpdHkpICU+JQogICAgc2pzdGF0czo6Ym9vdHN0cmFwKDEwMDApIAogIAogIGZhY3RvcnMgPC0gbGV2ZWxzKGZhY3Rvcihsb2FkaW5nc19hZHVsdHMkZmFjdG9yKSkKICAKICBjb25nX2RmX2FkdWx0cyA8LSBkYXRhLmZyYW1lKE5VTEwpCiAgZm9yIChpIGluIGZhY3RvcnMpIHsKICAgIGZvciAoaiBpbiBmYWN0b3JzKSB7CiAgICAgIGNuYW1lIDwtIHBhc3RlKGksIGosIHNlcCA9ICIuIikKICAgICAgdGVtcCA8LSBic19hZHVsdHMgJT4lCiAgICAgICAgbXV0YXRlKGNvbmcgPSBtYXBfZGJsKHN0cmFwLCB+Y29zaW5lKGFzLmRhdGEuZnJhbWUoLngpWyxpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuZGF0YS5mcmFtZSgueClbLGpdKSkpCiAgICAgIGNvbmdfZGZfYWR1bHRzWzE6MTAwMCwgY25hbWVdIDwtIHRlbXAkY29uZwogICAgfQogIH0KICAKICBjb25nX2RmX2FkdWx0cyA8LSBjb25nX2RmX2FkdWx0cyAlPiUKICAgIGdhdGhlcihmYWN0b3JfcGFpciwgY29uZykgJT4lCiAgICBzZXBhcmF0ZShmYWN0b3JfcGFpciwgaW50byA9IGMoImZhY3Rvcl9BIiwgImZhY3Rvcl9CIiksIHNlcCA9ICJcXC4iKSAlPiUKICAgIGdyb3VwX2J5KGZhY3Rvcl9BLCBmYWN0b3JfQikgJT4lCiAgICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oY29uZyksCiAgICAgICAgICAgICAgY2lfbG93ZXIgPSBjaV9sb3dlcihjb25nKSwKICAgICAgICAgICAgICBjaV91cHBlciA9IGNpX3VwcGVyKGNvbmcpKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIGxlZnRfam9pbihmYWN0b3JfbmFtZXNfYWR1bHRzICU+JQogICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJBIiwgc2VwID0gIl8iKSkpKSAlPiUKICAgIGxlZnRfam9pbihmYWN0b3JfbmFtZXNfYWR1bHRzICU+JQogICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJCIiwgc2VwID0gIl8iKSkpKQogIAogIHJtKGksIGosIGNuYW1lLCB0ZW1wLCBmYWN0b3JzKQogIAogIHNhdmVSRFMoY29uZ19kZl9hZHVsdHMsIGZpbGUgPSAiLi4vcmVzdWx0cy9jb25nX2RmX2FkdWx0c19kcm9wX3N1YmplY3RzLlJEUyIpCn0KYGBgCgpgYGB7ciBjb25nIG1pbiBhZHVsdHN9CiMgZmluZCBtaW5pbXVtIHZhbHVlIHRvIHNldCBjb25zdGFudCBsb3dlciBib3VuZCBvZiBwbG90cwptaW5fY29uZ19hZHVsdHMgPC0gY29uZ19kZl9hZHVsdHMgJT4lCiAgc3VtbWFyaXNlKG1pbl9jb25nID0gbWluKGNpX2xvd2VyLCBuYS5ybSA9IFQpKQpgYGAKCmBgYHtyIGNvbmcgY2lzIHVzIGJhc2UgYWR1bHRzLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC45fQojIEZJR1VSRSAzCmNvbmdfcGxvdF9mdW4oY29uZ19kZiA9IGNvbmdfZGZfYWR1bHRzLCB3aGljaF9jb3VudHJ5ID0gIlVTIikgKwogIHlsaW0obWluX2NvbmdfYWR1bHRzJG1pbl9jb25nLCAxKSArCiAgIyB5bGltKE5BLCAxKSArCiAgbGFicyh4ID0gTlVMTCkKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZzAzX2Ryb3Bfc3ViamVjdHMucG5nIikKYGBgCgpgYGB7ciBjb25nIGNpcyBnaCBiYXNlIGFkdWx0cywgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOX0KIyBGSUdVUkUgUzEKY29uZ19wbG90X2Z1bihjb25nX2RmID0gY29uZ19kZl9hZHVsdHMgJT4lCiAgICAgICAgICAgICAgICBtdXRhdGVfYXQoI3ZhcnMoY29udGFpbnMoImxhYmRlc2NyaXB0IikpLAogICAgICAgICAgICAgICAgICB2YXJzKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSwKICAgICAgICAgICAgICAgICAgZnVucyhnc3ViKCIgXFwoIiwgIlxuXFwoIiwgLikpKSAlPiUKICAgICAgICAgICAgICAgIG11dGF0ZV9hdCgjdmFycyhjb250YWlucygibGFiZGVzY3JpcHQiKSksCiAgICAgICAgICAgICAgICAgIHZhcnMoZmFjdG9yX2xhYmRlc2NyaXB0X0EpLAogICAgICAgICAgICAgICAgICBmdW5zKGdzdWIoIlxcLyIsICJcXC9cbiIsIC4pKSksIAogICAgICAgICAgICAgIHdoaWNoX2NvdW50cnkgPSAiR2hhbmEiKSArCiAgeWxpbShtaW5fY29uZ19hZHVsdHMkbWluX2NvbmcsIDEpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMDFfZHJvcF9zdWJqZWN0cy5wbmciKQpgYGAKCmBgYHtyIGNvbmcgY2lzIHRoIGJhc2UgYWR1bHRzLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC45fQojIEZJR1VSRSBTMgpjb25nX3Bsb3RfZnVuKGNvbmdfZGYgPSBjb25nX2RmX2FkdWx0cywgCiAgICAgICAgICAgICAgd2hpY2hfY291bnRyeSA9ICJUaGFpbGFuZCIpICsKICB5bGltKG1pbl9jb25nX2FkdWx0cyRtaW5fY29uZywgMSkKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MwMl9kcm9wX3N1YmplY3RzLnBuZyIpCmBgYAoKYGBge3IgY29uZyBjaXMgY2ggYmFzZSBhZHVsdHMsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjl9CiMgRklHVVJFIFMzCmNvbmdfcGxvdF9mdW4oY29uZ19kZiA9IGNvbmdfZGZfYWR1bHRzLCAKICAgICAgICAgICAgICB3aGljaF9jb3VudHJ5ID0gIkNoaW5hIikgKwogIHlsaW0obWluX2NvbmdfYWR1bHRzJG1pbl9jb25nLCAxKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnUzAzX2Ryb3Bfc3ViamVjdHMucG5nIikKYGBgCgpgYGB7ciBjb25nIGNpcyB2dCBiYXNlIGFkdWx0cywgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuOX0KIyBGSUdVUkUgUzQKY29uZ19wbG90X2Z1bihjb25nX2RmID0gY29uZ19kZl9hZHVsdHMgJT4lCiAgICAgICAgICAgICAgICBtdXRhdGVfYXQoI3ZhcnMoY29udGFpbnMoImxhYmRlc2NyaXB0IikpLAogICAgICAgICAgICAgICAgICB2YXJzKGZhY3Rvcl9sYWJkZXNjcmlwdF9BKSwKICAgICAgICAgICAgICAgICAgZnVucyhnc3ViKCIgXFwoIiwgIlxuXFwoIiwgLikpKSAlPiUKICAgICAgICAgICAgICAgIG11dGF0ZV9hdCgjdmFycyhjb250YWlucygibGFiZGVzY3JpcHQiKSksCiAgICAgICAgICAgICAgICAgIHZhcnMoZmFjdG9yX2xhYmRlc2NyaXB0X0EpLAogICAgICAgICAgICAgICAgICBmdW5zKGdzdWIoIlxcLyIsICJcXC9cbiIsIC4pKSksIAogICAgICAgICAgICAgIHdoaWNoX2NvdW50cnkgPSAiVmFudWF0dSIpICsKICB5bGltKG1pbl9jb25nX2FkdWx0cyRtaW5fY29uZywgMSkKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MwNF9kcm9wX3N1YmplY3RzLnBuZyIpCmBgYAoKYGBge3IgYm9keSBtaW5kIGNvbmcgYWR1bHRzfQojICJJbiBlYWNoIHNhbXBsZSwgdGhlcmUgd2FzIGEgZmFjdG9yIHRoYXQgd2FzIHNpbWlsYXIgdG8gVVMgYWR1bHRz4oCZIOKAnGJvZHnigJ0gZmFjdG9yLi4uCmNvbmdfZGZfYWR1bHRzICU+JSAKICBmaWx0ZXIoZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSksIAogICAgICAgICBncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSwKICAgICAgICAgY291bnRyeV9BICE9ICJVUyIsIGNvdW50cnlfQiA9PSAiVVMiKQoKIyAiLi4uYW5kIG5vdCBzaW1pbGFyIHRvIHRoZSBVUyBhZHVsdCDigJxtaW5k4oCdIGZhY3RvciwgLi4uCmNvbmdfZGZfYWR1bHRzICU+JSAKICBmaWx0ZXIoZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9BKSksIAogICAgICAgICBncmVwbCgibWluZCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSwKICAgICAgICAgY291bnRyeV9BICE9ICJVUyIsIGNvdW50cnlfQiA9PSAiVVMiKQoKIyAiLi4uIGFuZCBhIGZhY3RvciB0aGF0IHdhcyBzaW1pbGFyIHRvIFVTIGFkdWx0c+KAmSDigJxtaW5k4oCdIGZhY3Rvci4uLgpjb25nX2RmX2FkdWx0cyAlPiUgCiAgZmlsdGVyKGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpLCAKICAgICAgICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSksCiAgICAgICAgIGNvdW50cnlfQSAhPSAiVVMiLCBjb3VudHJ5X0IgPT0gIlVTIikKCiMgIi4uLmFuZCBub3Qgc2ltaWxhciB0byB0aGUgVVMgYWR1bHQg4oCcYm9keeKAnSBmYWN0b3IuIgpjb25nX2RmX2FkdWx0cyAlPiUgCiAgZmlsdGVyKGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpLCAKICAgICAgICAgZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSksCiAgICAgICAgIGNvdW50cnlfQSAhPSAiVVMiLCBjb3VudHJ5X0IgPT0gIlVTIikKYGBgCgoKIyBDaGlsZHJlbgoKIyMgU2FtcGxlcwoKYGBge3Igc2FtcGxlcyBjaGlsZHJlbn0KYmluZF9yb3dzKGRfdXNfY2hpbGRyZW4sIGRfZ2hfY2hpbGRyZW4sIGRfdGhfY2hpbGRyZW4sIGRfY2hfY2hpbGRyZW4sIGRfdnRfY2hpbGRyZW4pICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGxldmVscyA9IGxldmVsc19jb3VudHJ5KSkgJT4lCiAgZGlzdGluY3QoY291bnRyeSwgc3Vial9pZCkgJT4lCiAgY291bnQoY291bnRyeSkgJT4lIAogIGphbml0b3I6OmFkb3JuX3RvdGFscygpCmBgYAoKIyMgU2NhbGUgdXNlCgpgYGB7ciBzY2FsZSB1c2UgbWVhbiBvdmVyYWxsIGNoaWxkcmVufQpiaW5kX3Jvd3MoZF91c19jaGlsZHJlbiwgZF9naF9jaGlsZHJlbiwgZF90aF9jaGlsZHJlbiwgZF9jaF9jaGlsZHJlbiwgZF92dF9jaGlsZHJlbikgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpLAogICAgICAgICByZXNwb25zZV9jYXQgPSByZWNvZGVfZmFjdG9yKHJlc3BvbnNlX2NhdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8iID0gIm5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2luZCBvZiIgPSAia2luZCBvZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInllcyIgPSAieWVzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1pc3NpbmcgPSAibWlzc2luZyBkYXRhIikpICU+JQogIGNvdW50KGNvdW50cnksIHJlc3BvbnNlX2NhdCkgJT4lCiAgY29tcGxldGUocmVzcG9uc2VfY2F0LCBuZXN0aW5nKGNvdW50cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHJlc3BvbnNlX2NhdCwgcHJvcCkgJT4lCiAgamFuaXRvcjo6YWRvcm5fcGN0X2Zvcm1hdHRpbmcoZGlnaXRzID0gMikKYGBgCgojIyBGYWN0b3IgcmV0ZW50aW9uOiBwYXJhbGxlbCBhbmFseXNpcwoKYGBge3IgcGFyYWxsZWwgZGlzdCBjaGlsZHJlbiwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuNX0KIyBOT1RFOiB0aGVyZSBhcHBlYXJzIHRvIGJlIHNvbWUgdW5yZWxpYWJpbGl0eS9ub24tcmVwcm9kdWNpYmlsaXR5IGluIHJlc3VsdHMsIGVzcGVjaWFsbHkgZm9yIHZ0IGFkdWx0cywgd2hpY2ggSSBkb24ndCB1bmRlcnN0YW5kIC0tIHNvIGhlcmUncyB0aGUgZGlzdHJpYnV0aW9uIG92ZXIgb3V0Y29tZXMgb2YgcGFyYWxsZWwgYW5hbHlzaXMgd2l0aCAxMDAgaXRlcmF0aW9ucy4gV2UnbGwgY2hvb3NlIHRoZSBtZWRpYW4gbnVtYmVyIG9mIGZhY3RvcnMuCgppZiAoZmlsZS5leGlzdHMoIi4uL3Jlc3VsdHMvcGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbl9kcm9wX3N1YmplY3RzLlJEUyIpKSB7CiAgCiAgcGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbiA8LSByZWFkUkRTKCIuLi9yZXN1bHRzL3BhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW5fZHJvcF9zdWJqZWN0cy5SRFMiKQogIAp9IGVsc2UgewogIAogIHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW4gPC0gZGF0YS5mcmFtZSh1cyA9IE5VTEwsIGdoID0gTlVMTCwgdGggPSBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IE5VTEwsIHZ0ID0gTlVMTCkKICAKICBzZXQuc2VlZCg1NDMyMSkKICBuX2NvcmVzIDwtIHBhcmFsbGVsOjpkZXRlY3RDb3JlcygpCiAgb3B0aW9ucyhtYy5jb3JlcyA9IG5fY29yZXMpCiAgCiAgZm9yIChpIGluIDE6MTAwKSB7CiAgICBwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuW2ksICJ1cyJdIDwtIGZhLnBhcmFsbGVsKGRfdXNfY2hpbGRyZW5fdywgcGxvdCA9IEYpJG5mYWN0CiAgICBwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuW2ksICJnaCJdIDwtIGZhLnBhcmFsbGVsKGRfZ2hfY2hpbGRyZW5fdywgcGxvdCA9IEYpJG5mYWN0ICAgICAKICAgIHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW5baSwgInRoIl0gPC0gZmEucGFyYWxsZWwoZF90aF9jaGlsZHJlbl93LCBwbG90ID0gRikkbmZhY3QKICAgIHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW5baSwgImNoIl0gPC0gZmEucGFyYWxsZWwoZF9jaF9jaGlsZHJlbl93LCBwbG90ID0gRikkbmZhY3QKICAgIHBhX291dGNvbWVzX2Rpc3RfY2hpbGRyZW5baSwgInZ0Il0gPC0gZmEucGFyYWxsZWwoZF92dF9jaGlsZHJlbl93LCBwbG90ID0gRikkbmZhY3QKICB9CiAgCiAgc2F2ZVJEUyhwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuLCBmaWxlID0gIi4uL3Jlc3VsdHMvcGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbl9kcm9wX3N1YmplY3RzLlJEUyIpCn0KCiMgcGxvdApwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiaXRlciIpICU+JQogIGdhdGhlcihjb3VudHJ5LCBuZmFjdCwgLWl0ZXIpICU+JQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygidXMiLCAiZ2giLCAidGgiLCAiY2giLCAidnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdncGxvdChhZXMoeCA9IG5mYWN0KSkgKwogIGZhY2V0X2dyaWQofiBjb3VudHJ5KSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygxLCBtYXgocGFfb3V0Y29tZXNfZGlzdF9jaGlsZHJlbikgKyAxKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKDAsIDEwMCwgMSkpICsKICBsYWJzKHggPSAiTnVtYmVyIG9mIGZhY3RvcnMgc3VnZ2VzdGVkIGJ5IGZhLnBhcmFsbGVsKCkiKQpgYGAKCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKYGBge3IgZWZhIGNoaWxkcmVufQpzZXQuc2VlZCg1NDMyMSkKCiMgZG8gZXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzOiBjaGlsZHJlbgplZmFfdXNfY2hpbGRyZW4gPC0gZmFfZnVuKGRfdXNfY2hpbGRyZW5fdywgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuJHVzKSkKY29sbmFtZXMoZWZhX3VzX2NoaWxkcmVuJGxvYWRpbmdzKSA8LSBwYXN0ZTAoInVzQ0hJTERSRU5fIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV91c19jaGlsZHJlbiRsb2FkaW5ncykpCgplZmFfZ2hfY2hpbGRyZW4gPC0gZmFfZnVuKGRfZ2hfY2hpbGRyZW5fdywgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuJGdoKSkKY29sbmFtZXMoZWZhX2doX2NoaWxkcmVuJGxvYWRpbmdzKSA8LSBwYXN0ZTAoImdoQ0hJTERSRU5fIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9naF9jaGlsZHJlbiRsb2FkaW5ncykpCgplZmFfdGhfY2hpbGRyZW4gPC0gZmFfZnVuKGRfdGhfY2hpbGRyZW5fdywgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuJHRoKSkKY29sbmFtZXMoZWZhX3RoX2NoaWxkcmVuJGxvYWRpbmdzKSA8LSBwYXN0ZTAoInRoQ0hJTERSRU5fIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV90aF9jaGlsZHJlbiRsb2FkaW5ncykpCgplZmFfY2hfY2hpbGRyZW4gPC0gZmFfZnVuKGRfY2hfY2hpbGRyZW5fdywgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuJGNoKSkKY29sbmFtZXMoZWZhX2NoX2NoaWxkcmVuJGxvYWRpbmdzKSA8LSBwYXN0ZTAoImNoQ0hJTERSRU5fIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9jaF9jaGlsZHJlbiRsb2FkaW5ncykpCgplZmFfdnRfY2hpbGRyZW4gPC0gZmFfZnVuKGRfdnRfY2hpbGRyZW5fdywgbiA9IG1lZGlhbihwYV9vdXRjb21lc19kaXN0X2NoaWxkcmVuJHZ0KSkKY29sbmFtZXMoZWZhX3Z0X2NoaWxkcmVuJGxvYWRpbmdzKSA8LSBwYXN0ZTAoInZ0Q0hJTERSRU5fIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV92dF9jaGlsZHJlbiRsb2FkaW5ncykpCmBgYAoKYGBge3IgZmFjdG9yIG5hbWVzIGNoaWxkcmVufQpmYWN0b3JfbmFtZXNfY2hpbGRyZW4gPC0gZGF0YS5mcmFtZShmYWN0b3IgPSBjKGNvbG5hbWVzKGVmYV91c19jaGlsZHJlbiRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX2doX2NoaWxkcmVuJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lcyhlZmFfdGhfY2hpbGRyZW4kbG9hZGluZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWVzKGVmYV9jaF9jaGlsZHJlbiRsb2FkaW5ncyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZXMoZWZhX3Z0X2NoaWxkcmVuJGxvYWRpbmdzKSkpICU+JQogIG11dGF0ZShhZ2VfZ3JvdXAgPSAiY2hpbGRyZW4iKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGNhc2Vfd2hlbihncmVwbCgiXnVzIiwgZmFjdG9yKSB+ICJVUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl5naCIsIGZhY3RvcikgfiAiR2hhbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJedGgiLCBmYWN0b3IpIH4gIlRoYWlsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiXmNoIiwgZmFjdG9yKSB+ICJDaGluYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl52dCIsIGZhY3RvcikgfiAiVmFudWF0dSIpLAogICAgICAgICBjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGxldmVsc19jb3VudHJ5KSkgJT4lCiAgbXV0YXRlKGZhY3Rvcl9uYW1lID0gZ3N1YigiXnVzIiwgIlVTICIsIGZhY3RvciksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXmdoIiwgIkdoLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXnRoIiwgIlRoLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXmNoIiwgIkNoLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiXnZ0IiwgIlZhLiAiLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiQ0hJTERSRU4iLCAiY2hpbGRyZW4iLCBmYWN0b3JfbmFtZSksCiAgICAgICAgIGZhY3Rvcl9uYW1lID0gZ3N1YigiX0YiLCAiIEZhY3RvciAiLCBmYWN0b3JfbmFtZSkpICU+JQogIG11dGF0ZShmYWN0b3JfZGVzY3JpcHQgPSByZWNvZGUoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNDSElMRFJFTl9GMSA9ICJCb2R5LWxpa2UsIG5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzQ0hJTERSRU5fRjIgPSAiSGVhcnQtbGlrZSwgcG9zaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNDSElMRFJFTl9GMyA9ICJNaW5kLWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2hDSElMRFJFTl9GMSA9ICJCb2R5LWxpa2UsIG5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdoQ0hJTERSRU5fRjIgPSAiTWluZC1saWtlLCBwb3NpdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaENISUxEUkVOX0YzID0gIlByYXksIGFkZCwgZXRjLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aENISUxEUkVOX0YxID0gIkJvZHktbGlrZSwgcG9zaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhDSElMRFJFTl9GMiA9ICJIZWFydC1saWtlLCBuZWdhdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aENISUxEUkVOX0YzID0gIk1pbmQtbGlrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aENISUxEUkVOX0Y0ID0gIkFkZCwgcHJheSwgZXRjLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaENISUxEUkVOX0YxID0gIkhlYXJ0LWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hDSElMRFJFTl9GMiA9ICJNaW5kLWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hDSElMRFJFTl9GMyA9ICJCb2R5LWxpa2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hDSElMRFJFTl9GNCA9ICJQcmF5LCBldGMuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0Q0hJTERSRU5fRjEgPSAiQm9keS1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0Q0hJTERSRU5fRjIgPSAiTWluZC1saWtlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0Q0hJTERSRU5fRjMgPSAiSGVhcnQtbGlrZSIpLAogICAgICAgICBmYWN0b3JfbGFiZGVzY3JpcHQgPSBwYXN0ZShnc3ViKCIuKl9GIiwgIkYiLCBmYWN0b3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfZGVzY3JpcHQsIHNlcCA9ICI6ICIpKQpgYGAKCiMjIEZhY3RvciBsb2FkaW5ncwoKYGBge3Igb3JkZXIgY2hpbGRyZW59CiMgb3JkZXIgY2FwYWNpdGllczogY2hpbGRyZW4Kb3JkZXJfdXNfY2hpbGRyZW4gPC0gZmEuc29ydChlZmFfdXNfY2hpbGRyZW4pJGxvYWRpbmdzW10gJT4lIHJvd25hbWVzKCkKb3JkZXJfZ2hfY2hpbGRyZW4gPC0gZmEuc29ydChlZmFfZ2hfY2hpbGRyZW4pJGxvYWRpbmdzW10gJT4lIHJvd25hbWVzKCkKb3JkZXJfdGhfY2hpbGRyZW4gPC0gZmEuc29ydChlZmFfdGhfY2hpbGRyZW4pJGxvYWRpbmdzW10gJT4lIHJvd25hbWVzKCkKb3JkZXJfY2hfY2hpbGRyZW4gPC0gZmEuc29ydChlZmFfY2hfY2hpbGRyZW4pJGxvYWRpbmdzW10gJT4lIHJvd25hbWVzKCkKb3JkZXJfdnRfY2hpbGRyZW4gPC0gZmEuc29ydChlZmFfdnRfY2hpbGRyZW4pJGxvYWRpbmdzW10gJT4lIHJvd25hbWVzKCkKYGBgCgpgYGB7ciBsb2FkaW5ncyBjaGlsZHJlbn0KIyBjb21waWxlIGxvYWRpbmdzOiBjaGlsZHJlbgpsb2FkaW5nc19jaGlsZHJlbiA8LSBiaW5kX3Jvd3MoCiAgbG9hZGluZ3NfZnVuKGVmYV91c19jaGlsZHJlbikgJT4lIG11dGF0ZShjb3VudHJ5ID0gIlVTIiksCiAgbG9hZGluZ3NfZnVuKGVmYV9naF9jaGlsZHJlbikgJT4lIG11dGF0ZShjb3VudHJ5ID0gIkdoYW5hIiksCiAgbG9hZGluZ3NfZnVuKGVmYV90aF9jaGlsZHJlbikgJT4lIG11dGF0ZShjb3VudHJ5ID0gIlRoYWlsYW5kIiksCiAgbG9hZGluZ3NfZnVuKGVmYV9jaF9jaGlsZHJlbikgJT4lIG11dGF0ZShjb3VudHJ5ID0gIkNoaW5hIiksCiAgbG9hZGluZ3NfZnVuKGVmYV92dF9jaGlsZHJlbikgJT4lIG11dGF0ZShjb3VudHJ5ID0gIlZhbnVhdHUiKSkgJT4lCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgbGV2ZWxzID0gbGV2ZWxzX2NvdW50cnkpLAogICAgICAgICBjYXBhY2l0eV9vcmRfdXMgPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX3VzX2NoaWxkcmVuKSwKICAgICAgICAgY2FwYWNpdHlfb3JkX2doID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBvcmRlcl9naF9jaGlsZHJlbiksCiAgICAgICAgIGNhcGFjaXR5X29yZF90aCA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gb3JkZXJfdGhfY2hpbGRyZW4pLAogICAgICAgICBjYXBhY2l0eV9vcmRfY2ggPSBmYWN0b3IoY2FwYWNpdHksIGxldmVscyA9IG9yZGVyX2NoX2NoaWxkcmVuKSwKICAgICAgICAgY2FwYWNpdHlfb3JkX3Z0ID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBvcmRlcl92dF9jaGlsZHJlbikpICU+JQogIGFycmFuZ2UoY291bnRyeSwgZmFjdG9yLCBkZXNjKGFicyhsb2FkaW5nKSksIGNhcGFjaXR5KSAlPiUKICBtdXRhdGUob3JkZXIgPSAxOm5yb3coLikpICU+JQogIGxlZnRfam9pbihmYWN0b3JfbmFtZXNfY2hpbGRyZW4pCmBgYAoKYGBge3IgaGVhdG1hcHMgYnkgc2l0ZSBjaGlsZHJlbiwgZmlnLndpZHRoID0gMTUsIGZpZy5hc3AgPSAwLjI1fQpwbG90X2dyaWQoaGVhdG1hcF9mdW4oZWZhX3VzX2NoaWxkcmVuLCAKICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19jaGlsZHJlbiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGNvdW50cnkgPT0gIlVTIikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChmYWN0b3JfbGFiZGVzY3JpcHQpICU+JQogICAgICAgICAgICAgICAgICAgICAgICB1bmxpc3QoKSkgKyAKICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICAgICAgICAgIGxhYnModGl0bGUgPSAiVVM6IGNoaWxkcmVuIiksCiAgICAgICAgICBoZWF0bWFwX2Z1bihlZmFfZ2hfY2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfY2hpbGRyZW4gJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJHaGFuYSIpICU+JQogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoZmFjdG9yX2xhYmRlc2NyaXB0KSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgdW5saXN0KCkpICsgCiAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogICAgICAgICAgICBsYWJzKHRpdGxlID0gIkdIQU5BOiBjaGlsZHJlbiIpLAogICAgICAgICAgaGVhdG1hcF9mdW4oZWZhX3RoX2NoaWxkcmVuLAogICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzID0gZmFjdG9yX25hbWVzX2NoaWxkcmVuICU+JQogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoY291bnRyeSA9PSAiVGhhaWxhbmQiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KGZhY3Rvcl9sYWJkZXNjcmlwdCkgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHVubGlzdCgpKSArIAogICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICAgICAgICAgICAgbGFicyh0aXRsZSA9ICJUSEFJTEFORDogY2hpbGRyZW4iKSwKICAgICAgICAgIGhlYXRtYXBfZnVuKGVmYV9jaF9jaGlsZHJlbiwKICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl9uYW1lcyA9IGZhY3Rvcl9uYW1lc19jaGlsZHJlbiAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGNvdW50cnkgPT0gIkNoaW5hIikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChmYWN0b3JfbGFiZGVzY3JpcHQpICU+JQogICAgICAgICAgICAgICAgICAgICAgICB1bmxpc3QoKSkgKyAKICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICAgICAgICAgIGxhYnModGl0bGUgPSAiQ0hJTkE6IGNoaWxkcmVuIiksCiAgICAgICAgICBoZWF0bWFwX2Z1bihlZmFfdnRfY2hpbGRyZW4sCiAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXMgPSBmYWN0b3JfbmFtZXNfY2hpbGRyZW4gJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihjb3VudHJ5ID09ICJWYW51YXR1IikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChmYWN0b3JfbGFiZGVzY3JpcHQpICU+JQogICAgICAgICAgICAgICAgICAgICAgICB1bmxpc3QoKSkgKyAKICAgICAgICAgICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgICAgICAgICAgIGxhYnModGl0bGUgPSAiVkFOVUFUVTogY2hpbGRyZW4iKSwKICAgICAgICAgIG5jb2wgPSA1KQpgYGAKCmBgYHtyIGhlYXRtYXAgY2hpbGRyZW4sIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjd9CiMgbWFrZSBoZWF0bWFwIGZpZ3VyZTogY2hpbGRyZW4KbG9hZGluZ3NfY2hpbGRyZW4gJT4lCiAgbXV0YXRlKGZhY3Rvcl9udW0gPSBhcy5udW1lcmljKGdzdWIoIi4qRiIsICIiLCBmYWN0b3IpKSkgJT4lCiAgbXV0YXRlKHNhbXBsZSA9IHBhc3RlKGNvdW50cnksICJjaGlsZHJlbiIsIHNlcCA9ICJcbiIpKSAlPiUKICBsZWZ0X2pvaW4oZmFjdG9yX25hbWVzX2NoaWxkcmVuKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIoZmFjdG9yX2xhYmRlc2NyaXB0LCBmYWN0b3JfbnVtKSwgCiAgICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfdXMpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX2VjKSksIAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfZ2gpKSwKICAgICAgICAgICAgICMgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2MoY2FwYWNpdHlfb3JkX3RoKSksCiAgICAgICAgICAgICAjIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKGNhcGFjaXR5X29yZF9jaCkpLAogICAgICAgICAgICAgIyB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhjYXBhY2l0eV9vcmRfdnQpKSwKICAgICAgICAgICAgIGZpbGwgPSBsb2FkaW5nKSkgKwogIGZhY2V0X2dyaWQofiByZW9yZGVyKHNhbXBsZSwgYXMubnVtZXJpYyhjb3VudHJ5KSksIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC4yKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMikpLCBzaXplID0gMykgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAyMCwgYmFyd2lkdGggPSAwLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgcGFuZWwuc3BhY2luZy54ID0gdW5pdCgwLjgsICJsaW5lcyIpLAogICAgICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGZhY2UgPSAiYm9sZCIpKSArCiAgbGFicyh4ID0gTlVMTCwgeSA9ICJDYXBhY2l0eSIsIGZpbGwgPSAiRmFjdG9yXG5sb2FkaW5nIikKYGBgCgojIyBDb25ncnVlbmNlCgpTZWUgW0FsbCBzYW1wbGVzXSwgYmVsb3cuCgojIyBCb290c3RyYXBwZWQgY29uZ3J1ZW5jZQoKYGBge3IgYm9vdHN0cmFwIGNvbmdydWVuY2UgY2hpbGRyZW59CmlmIChmaWxlLmV4aXN0cygiLi4vcmVzdWx0cy9jb25nX2RmX2NoaWxkcmVuX2Ryb3Bfc3ViamVjdHMuUkRTIikpIHsKICAKICBjb25nX2RmX2NoaWxkcmVuIDwtIHJlYWRSRFMoIi4uL3Jlc3VsdHMvY29uZ19kZl9jaGlsZHJlbl9kcm9wX3N1YmplY3RzLlJEUyIpCiAgCn0gZWxzZSB7CiAgCiAgYnNfY2hpbGRyZW4gPC0gbG9hZGluZ3NfY2hpbGRyZW4gJT4lCiAgICBzZWxlY3QoY2FwYWNpdHksIGZhY3RvciwgbG9hZGluZykgJT4lCiAgICBzcHJlYWQoZmFjdG9yLCBsb2FkaW5nKSAlPiUKICAgIGZ1bGxfam9pbihsb2FkaW5nc19hZHVsdHMgJT4lCiAgICAgICAgICAgICAgICBzZWxlY3QoY2FwYWNpdHksIGZhY3RvciwgbG9hZGluZykgJT4lCiAgICAgICAgICAgICAgICBzcHJlYWQoZmFjdG9yLCBsb2FkaW5nKSkgJT4lCiAgICBzZWxlY3QoLWNhcGFjaXR5KSAlPiUKICAgIGJvb3RzdHJhcCgxMDAwKSAKICAKICBjb25nX2RmX2NoaWxkcmVuIDwtIGRhdGEuZnJhbWUoTlVMTCkKICAKICBmb3IgKGsgaW4gbGV2ZWxzX2NvdW50cnkpIHsKICAgIAogICAgZmFjdG9yc19jaGlsZHJlbiA8LSBsZXZlbHMoZmFjdG9yKGxvYWRpbmdzX2NoaWxkcmVuJGZhY3RvclsKICAgICAgbG9hZGluZ3NfY2hpbGRyZW4kY291bnRyeSA9PSBrXSkpCiAgICBmYWN0b3JzX2FkdWx0cyA8LSBsZXZlbHMoZmFjdG9yKGxvYWRpbmdzX2FkdWx0cyRmYWN0b3JbCiAgICAgIGxvYWRpbmdzX2FkdWx0cyRjb3VudHJ5ID09IGtdKSkKICAgIAogICAgZm9yIChpIGluIGZhY3RvcnNfY2hpbGRyZW4pIHsKICAgICAgZm9yIChqIGluIGZhY3RvcnNfYWR1bHRzKSB7CiAgICAgICAgY25hbWUgPC0gcGFzdGUoaSwgaiwgc2VwID0gIi4iKQogICAgICAgIHRlbXAgPC0gYnNfY2hpbGRyZW4gJT4lCiAgICAgICAgICBtdXRhdGUoY29uZyA9IG1hcF9kYmwoc3RyYXAsIH5jb3NpbmUoYXMuZGF0YS5mcmFtZSgueClbLGldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmRhdGEuZnJhbWUoLngpWyxqXSkpKQogICAgICAgIGNvbmdfZGZfY2hpbGRyZW5bMToxMDAwLCBjbmFtZV0gPC0gdGVtcCRjb25nCiAgICAgIH0KICAgIH0KICAgIAogICAgcm0oaSwgaiwgY25hbWUsIHRlbXAsIGZhY3RvcnNfY2hpbGRyZW4sIGZhY3RvcnNfYWR1bHRzKQogICAgCiAgfQogIAogIHJtKGspCiAgCiAgY29uZ19kZl9jaGlsZHJlbiA8LSBjb25nX2RmX2NoaWxkcmVuICU+JQogICAgZ2F0aGVyKGZhY3Rvcl9wYWlyLCBjb25nKSAlPiUKICAgIHNlcGFyYXRlKGZhY3Rvcl9wYWlyLCBpbnRvID0gYygiZmFjdG9yX0EiLCAiZmFjdG9yX0IiKSwgc2VwID0gIlxcLiIpICU+JQogICAgZ3JvdXBfYnkoZmFjdG9yX0EsIGZhY3Rvcl9CKSAlPiUKICAgIHN1bW1hcmlzZShtZWFuID0gbWVhbihjb25nKSwKICAgICAgICAgICAgICBjaV9sb3dlciA9IGNpX2xvd2VyKGNvbmcpLAogICAgICAgICAgICAgIGNpX3VwcGVyID0gY2lfdXBwZXIoY29uZykpICU+JQogICAgdW5ncm91cCgpICU+JQogICAgZnVsbF9qb2luKGZhY3Rvcl9uYW1lc19jaGlsZHJlbiAlPiUKICAgICAgICAgICAgICAgIHJlbmFtZV9hbGwoZnVucyhwYXN0ZSguLCAiQSIsIHNlcCA9ICJfIikpKSkgJT4lCiAgICBmdWxsX2pvaW4oZmFjdG9yX25hbWVzX2FkdWx0cyAlPiUKICAgICAgICAgICAgICAgIHJlbmFtZV9hbGwoZnVucyhwYXN0ZSguLCAiQiIsIHNlcCA9ICJfIikpKSkgJT4lCiAgICBtdXRhdGUoZmFjdG9yX2JobV9BID0gY2FzZV93aGVuKAogICAgICBncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0EpKSB+ICJCb2R5LWxpa2VcbmNoaWxkIGZhY3RvciIsCiAgICAgIGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpIH4gIk1pbmQtbGlrZVxuY2hpbGQgZmFjdG9yIiwKICAgICAgZ3JlcGwoImhlYXJ0IiwgdG9sb3dlcihmYWN0b3JfZGVzY3JpcHRfQSkpIH4gIkhlYXJ0LWxpa2VcbmNoaWxkIGZhY3RvciIsCiAgICAgIFRSVUUgfiAiT3RoZXIiKSkgJT4lCiAgICBtdXRhdGUoZmFjdG9yX2JobV9CID0gY2FzZV93aGVuKAogICAgICBncmVwbCgiYm9keSIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSB+ICJMb2NhbCBhZHVsdHM6XG5Cb2R5LWxpa2UgZmFjdG9yIiwKICAgICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9kZXNjcmlwdF9CKSkgfiAiTG9jYWwgYWR1bHRzOlxuTWluZC1saWtlIGZhY3RvciIsCiAgICAgIGdyZXBsKCJoZWFydCIsIHRvbG93ZXIoZmFjdG9yX2Rlc2NyaXB0X0IpKSB+ICJMb2NhbCBhZHVsdHM6XG5IZWFydC1saWtlIGZhY3RvciIsCiAgICAgIFRSVUUgfiAiTG9jYWwgYWR1bHRzOlxuT3RoZXIgZmFjdG9yIikpCiAgCiAgc2F2ZVJEUyhjb25nX2RmX2NoaWxkcmVuLCBmaWxlID0gIi4uL3Jlc3VsdHMvY29uZ19kZl9jaGlsZHJlbl9kcm9wX3N1YmplY3RzLlJEUyIpCn0KYGBgCgpgYGB7ciBjb25nIG1pbiBjaGlsZHJlbn0KIyBmaW5kIG1pbmltdW0gdmFsdWUgdG8gc2V0IGNvbnN0YW50IGxvd2VyIGJvdW5kIG9mIHBsb3RzCm1pbl9jb25nX2NoaWxkcmVuIDwtIGNvbmdfZGZfY2hpbGRyZW4gJT4lCiAgc3VtbWFyaXNlKG1pbl9jb25nID0gbWluKGNpX2xvd2VyLCBuYS5ybSA9IFQpKQpgYGAKCmBgYHtyIGNvbmcgY2lzIGNoaWxkcmVuLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMS40fQojIEZJR1VSRSA0CiMgZmlnLmFzcCBjaG9zZW4gdG8ga2VlcCBhYnNvbHV0ZSBoZWlnaHQgb2YgeS1heGlzIHJlbGF0aXZlbHkgc2ltaWxhciBhY3Jvc3MgYWR1bHRzIGFuZCBjaGlsZHJlbgpjb25nX2RmX2NoaWxkcmVuICU+JQogIG11dGF0ZShzYW1wbGVfQSA9IHBhc3RlKGNvdW50cnlfQSwgYWdlX2dyb3VwX0EsIHNlcCA9ICJcbiIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBmYWN0b3JfbGFiZGVzY3JpcHRfQSwgeSA9IG1lYW4pKSArCiAgZmFjZXRfZ3JpZChmYWN0b3JfYmhtX0IgfiByZW9yZGVyKHNhbXBsZV9BLCBhcy5udW1lcmljKGNvdW50cnlfQSkpLCAKICAgICAgICAgICAgIHNjYWxlcyA9ICJmcmVlX3giLCBzcGFjZSA9ICJmcmVlX3giKSArCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gLUluZiwgeG1heCA9IEluZiwgeW1pbiA9IC1JbmYsIHltYXggPSAwLjg1LAogICAgICAgICAgIGZpbGwgPSAiZ3JheTIwIiwgYWxwaGEgPSAwLjIpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAtSW5mLCB4bWF4ID0gSW5mLCB5bWluID0gMC44NSwgeW1heCA9IDAuOTUsCiAgICAgICAgICAgZmlsbCA9IHZpcmlkaXNMaXRlOjp2aXJpZGlzKDIsIGJlZ2luID0gMC43NS8yLCBlbmQgPSAwLjc1KVsxXSwgYWxwaGEgPSAwLjIpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAtSW5mLCB4bWF4ID0gSW5mLCB5bWluID0gMC45NSwgeW1heCA9IEluZiwKICAgICAgICAgICBmaWxsID0gdmlyaWRpc0xpdGU6OnZpcmlkaXMoMiwgYmVnaW4gPSAwLjc1LzIsIGVuZCA9IDAuNzUpWzJdLCBhbHBoYSA9IDAuMikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuODUsIGx0eSA9IDIsIGNvbG9yID0gImdyYXkxMCIpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjk1LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5MTAiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDMsCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobWVhbiwgMiksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAgeSA9IGlmZWxzZShjaV9sb3dlciA8IDAuMiwgY2lfdXBwZXIgKyAwLjA1LCBjaV9sb3dlciAtIDAuMDUpLAogICAgICAgICAgICAgICAgdmp1c3QgPSBpZmVsc2UoY2lfbG93ZXIgPCAwLjIsIDAsIDEpKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEsIDEsIDAuMiksCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGV4cGFuc2lvbihhZGQgPSAwLjA1KSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgYWVzdGhldGljcyA9IGMoImNvbG9yIiwgImZpbGwiKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSAyMToyNSkgKwogIGxhYnMoeCA9IE5VTEwsCiAgICAgICB5ID0gZXhwcmVzc2lvbigiU2ltaWxhcml0eSAiKGl0YWxpYyhyW2NdKSkpKSArIAogIGd1aWRlcyhjb2xvciA9ICJub25lIiwgZmlsbCA9ICJub25lIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIsCiAgICAgICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBzY2FsZXM6OmFscGhhKCJ3aGl0ZSIsIDApLCBjb2xvciA9ICJibGFjayIpLAogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBmYWNlID0gImJvbGQiKSwgCiAgICAgICAgcGxvdC5tYXJnaW4gPSB1bml0KGMoNS41LCA1LjUsIDUuNSwgMTUuNSksICJwb2ludCIpKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnMDRfZHJvcF9zdWJqZWN0cy5wbmciKQpgYGAKCmBgYHtyIGJvZHkgbWluZCBjb25nIGNoaWxkcmVufQojICJJbiBlYWNoIHNhbXBsZSwgdGhlcmUgd2FzIGEgZmFjdG9yIHRoYXQgd2FzIHNpbWlsYXIgdG8gbG9jYWwgYWR1bHRz4oCZIOKAnGJvZHktbGlrZeKAnSBmYWN0b3IuLi4KY29uZ19kZl9jaGlsZHJlbiAlPiUgCiAgZmlsdGVyKGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfYmhtX0EpKSwgCiAgICAgICAgIGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfYmhtX0IpKSkKCiMgIi4uLmFuZCBub3Qgc2ltaWxhciB0byB0aGVpciDigJxtaW5kLWxpa2XigJ0gZmFjdG9yLCAuLi4KY29uZ19kZl9jaGlsZHJlbiAlPiUgCiAgZmlsdGVyKGdyZXBsKCJib2R5IiwgdG9sb3dlcihmYWN0b3JfYmhtX0EpKSwgCiAgICAgICAgIGdyZXBsKCJtaW5kIiwgdG9sb3dlcihmYWN0b3JfYmhtX0IpKSkKCiMgIi4uLiBhbmQgYSBmYWN0b3IgdGhhdCB3YXMgc2ltaWxhciB0byBsb2NhbCBhZHVsdHPigJkg4oCcbWluZC1saWtl4oCdIGZhY3Rvci4uLgpjb25nX2RmX2NoaWxkcmVuICU+JSAKICBmaWx0ZXIoZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQSkpLCAKICAgICAgICAgZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQikpKQoKIyAiLi4uYW5kIG5vdCBzaW1pbGFyIHRvIHRoZWlyIOKAnGJvZHktbGlrZeKAnSBmYWN0b3IuIgpjb25nX2RmX2NoaWxkcmVuICU+JSAKICBmaWx0ZXIoZ3JlcGwoIm1pbmQiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQSkpLCAKICAgICAgICAgZ3JlcGwoImJvZHkiLCB0b2xvd2VyKGZhY3Rvcl9iaG1fQikpKQpgYGAKCgojIEFsbCBzYW1wbGVzCgojIyBDb25ncnVlbmNlCgpgYGB7ciBjb25ncnVlbmNlIGFsbCBzYW1wbGVzfQpjb25nX2FsbCA8LSBmYS5jb25ncnVlbmNlKHggPSBsaXN0KGVmYV91c19hZHVsdHMkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX2doX2FkdWx0cyRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfdGhfYWR1bHRzJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV9jaF9hZHVsdHMkbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX3Z0X2FkdWx0cyRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfdXNfY2hpbGRyZW4kbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX2doX2NoaWxkcmVuJGxvYWRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmYV90aF9jaGlsZHJlbiRsb2FkaW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmFfY2hfY2hpbGRyZW4kbG9hZGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZhX3Z0X2NoaWxkcmVuJGxvYWRpbmdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSA1KSAlPiUKICAjIGdldF91cHBlcl90cmlfZnVuKCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiZmFjdG9yX0EiKSAlPiUKICBnYXRoZXIoZmFjdG9yX0IsIGNvbmcsIC1mYWN0b3JfQSkgJT4lCiAgbGVmdF9qb2luKGJpbmRfcm93cyhmYWN0b3JfbmFtZXNfYWR1bHRzICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgcmVuYW1lX2FsbChmdW5zKHBhc3RlKC4sICJBIiwgc2VwID0gIl8iKSkpLAogICAgICAgICAgICAgICAgICAgICAgZmFjdG9yX25hbWVzX2NoaWxkcmVuICU+JQogICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkEiLCBzZXAgPSAiXyIpKSkpKSAlPiUKICBsZWZ0X2pvaW4oYmluZF9yb3dzKGZhY3Rvcl9uYW1lc19hZHVsdHMgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVfYWxsKGZ1bnMocGFzdGUoLiwgIkIiLCBzZXAgPSAiXyIpKSksCiAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfbmFtZXNfY2hpbGRyZW4gJT4lCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZV9hbGwoZnVucyhwYXN0ZSguLCAiQiIsIHNlcCA9ICJfIikpKSkpCmBgYAoKYGBge3IgY29uZyBhbGwgcGFpcnMgZm9ybWF0fQojIG1ha2Ugd2lkZS1mb3JtIHZlcnNpb24gb2YgZGYKY29uZ19hbGxfdyA8LSBjb25nX2FsbCAlPiUKICBzZWxlY3QoZmFjdG9yX0EsIGZhY3Rvcl9CLCBjb25nKSAlPiUKICBzcHJlYWQoZmFjdG9yX0IsIGNvbmcpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygiZmFjdG9yX0EiKQoKIyB0cmVhdCBzaW1pbGFyaXR5IG1hdHJpeCBhcyBpZiBpdCB3ZXJlIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXggZm9yIGhjbHVzdApyb3cub3JkZXIgPC0gaGNsdXN0KGFzLmRpc3QoKDEgLSBjb25nX2FsbF93KS8yKSkkb3JkZXIKY29sLm9yZGVyIDwtIGhjbHVzdChhcy5kaXN0KHQoKDEgLSBjb25nX2FsbF93KS8yKSkpJG9yZGVyCgojIHJlLW9yZGVyIG1hdHJpeCBhY2NvcmluZyB0byBjbHVzdGVyaW5nCmNvbmdfYWxsX3cgPC0gY29uZ19hbGxfd1tyb3cub3JkZXIsIGNvbC5vcmRlcl0gCgojIGZvciBzb21lIHJlYXNvbiByZXNoYXBlMjo6bWVsdCgpIHdvcmtzIGJldHRlciB0aGFuIGN1cnJlbnQgdGlkeXZlcnNlIGZ1bmN0aW9ucy4uLgpjb25nX2FsbF9vcmRlcmVkIDwtIG1lbHQoYXMubWF0cml4KGNvbmdfYWxsX3cpKSAlPiUKICByZW5hbWUoZmFjdG9yX0Ffb3JkZXJlZCA9IFZhcjEsIAogICAgICAgICBmYWN0b3JfQl9vcmRlcmVkID0gVmFyMiwKICAgICAgICAgY29uZyA9IHZhbHVlKSAlPiUKICBtdXRhdGUoZmFjdG9yX0EgPSBhcy5jaGFyYWN0ZXIoZmFjdG9yX0Ffb3JkZXJlZCksCiAgICAgICAgIGZhY3Rvcl9CID0gYXMuY2hhcmFjdGVyKGZhY3Rvcl9CX29yZGVyZWQpKSAlPiUKICBmdWxsX2pvaW4oY29uZ19hbGwgJT4lIHNlbGVjdChjb250YWlucygiX0EiKSkgJT4lIGRpc3RpbmN0KCkpICU+JQogIGZ1bGxfam9pbihjb25nX2FsbCAlPiUgc2VsZWN0KGNvbnRhaW5zKCJfQiIpKSAlPiUgZGlzdGluY3QoKSkgJT4lCiAgbXV0YXRlKGxhYl9BID0gcGFzdGUocGFzdGUoY291bnRyeV9BLCBhZ2VfZ3JvdXBfQSksIGZhY3Rvcl9sYWJkZXNjcmlwdF9BLCBzZXAgPSAiLCAiKSwKICAgICAgICAgbGFiX0IgPSBwYXN0ZShwYXN0ZShjb3VudHJ5X0IsIGFnZV9ncm91cF9CKSwgZmFjdG9yX2xhYmRlc2NyaXB0X0IsIHNlcCA9ICIsICIpKQojIG11dGF0ZShzYW1wbGVfQSA9IHBhc3RlKGNvdW50cnlfQSwgYWdlX2dyb3VwX0EsIHNlcCA9ICIsICIpLAojICAgICAgICBzYW1wbGVfQiA9IHBhc3RlKGNvdW50cnlfQiwgYWdlX2dyb3VwX0IsIHNlcCA9ICIsICIpLAojICAgICAgICBsYWJfQSA9IHBhc3RlKHNhbXBsZV9BLCBmYWN0b3JfbGFiZGVzY3JpcHRfQSwgc2VwID0gIiAiKSwKIyAgICAgICAgbGFiX0IgPSBwYXN0ZShzYW1wbGVfQiwgZmFjdG9yX2xhYmRlc2NyaXB0X0IsIHNlcCA9ICIgIikpCmBgYAoKYGBge3IgY29uZyBhbGwgcGFpcnMgcGxvdCwgZmlnLndpZHRoID0gOS41LCBmaWcuYXNwID0gMC45fQojIEZJR1VSRSAyCmNvbmdfbG93ZXJfbGltIDwtIGlmZWxzZShtaW4oY29uZ19hbGxfb3JkZXJlZCRjb25nKSA+IC0wLjA1LCAtMC4wNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBtaW4oY29uZ19hbGxfb3JkZXJlZCRjb25nKSkKIyBjb25nX3Bsb3RfY29sb3JzIDwtIGMoInJlZDQiLCAiYmx1ZTQiLCAiZGFya29yY2hpZDQiLCAiYmxhY2siKQojIGNvbmdfcGxvdF9jb2xvcnMgPC0gYygiYmxhY2siLCAiYmxhY2siLCAiYmxhY2siLCAiYmxhY2siKQpjb25nX3Bsb3RfY29sb3JzIDwtIGMoInJlZDQiLCAicmVkNCIsICJyZWQ0IiwgImJsYWNrIikKCmNvbmdfYWxsX29yZGVyZWQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihsYWJfQSwgYXMubnVtZXJpYyhmYWN0b3JfQV9vcmRlcmVkKSksCiAgICAgICAgICAgICB5ID0gcmVvcmRlcihsYWJfQiwgYXMubnVtZXJpYyhkZXNjKGZhY3Rvcl9CX29yZGVyZWQpKSksCiAgICAgICAgICAgICBmaWxsID0gY29uZykpICsgCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDAuMikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQoY29uZywgMiksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAgY29sb3IgPSBjYXNlX3doZW4oY29uZyA+IDAuODUgfiAiYSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZyA+IDAuNzUgfiAiYiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25nID4gMC42NSB+ICJjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAiZCIpKSwKICAgICAgICAgICAgc2hvdy5sZWdlbmQgPSBGKSArCiAgIyBtaW5kLWxpa2UgZmFjdG9ycwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDAuNSwgeG1heCA9IDEwLjUsIHltaW4gPSAyMC41LCB5bWF4ID0gMzAuNSwKICAgICAgICAgICBjb2xvciA9IGNvbmdfcGxvdF9jb2xvcnNbMV0sIHNpemUgPSAxLjUsIGFscGhhID0gMCkgKwogICMgYm9keS1saWtlIGZhY3RvcnMKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAxMy41LCB4bWF4ID0gMjMuNSwgeW1pbiA9IDcuNSwgeW1heCA9IDE3LjUsCiAgICAgICAgICAgY29sb3IgPSBjb25nX3Bsb3RfY29sb3JzWzNdLCBzaXplID0gMS41LCBhbHBoYSA9IDApICsKICAjIGhlYXJ0LWxpa2UgZmFjdG9ycwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDIzLjUsIHhtYXggPSAzMC41LCB5bWluID0gMC41LCB5bWF4ID0gNy41LAogICAgICAgICAgIGNvbG9yID0gY29uZ19wbG90X2NvbG9yc1syXSwgc2l6ZSA9IDEuNSwgYWxwaGEgPSAwKSArCiAgIyBzY2FsZV9maWxsX3ZpcmlkaXNfYyh0cmFucyA9IHNjYWxlczo6ZXhwX3RyYW5zKGJhc2UgPSBleHAoMSkpLAogICMgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYyhjb25nX2xvd2VyX2xpbSwgMSksIAogICMgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKGNvbmdfbG93ZXJfbGltLCAxLCAwLjA1KSwKICAjICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoZm9ybWF0KHNlcShjb25nX2xvd2VyX2xpbSwgMC44LCAwLjA1KSwgbnNtYWxsID0gMiksCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwLjg1ID0gbW9kZXJhdGUiLCAiMC45MCIsIAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMC45NSA9IGhpZ2giLCAiMS4wMCIpLAogICMgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gInZpcmlkaXMiLAogICMgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSA0MCkpICsKICBzY2FsZV9maWxsX2dyYWRpZW50bigjdHJhbnMgPSBzY2FsZXM6OmV4cF90cmFucyhiYXNlID0gZXhwKDEpKSwKICAgIGxpbWl0cyA9IGMoY29uZ19sb3dlcl9saW0sIDEpLCAKICAgIGJyZWFrcyA9IHNlcShjb25nX2xvd2VyX2xpbSwgMSwgMC4wNSksCiAgICBsYWJlbHMgPSBjKGZvcm1hdChzZXEoY29uZ19sb3dlcl9saW0sIDAuOCwgMC4wNSksIG5zbWFsbCA9IDIpLAogICAgICAgICAgICAgICAiMC44NSA9IG1vZGVyYXRlIiwgIjAuOTAiLCAKICAgICAgICAgICAgICAgIjAuOTUgPSBoaWdoIiwgIjEuMDAiKSwKICAgIGNvbG9ycyA9IHZpcmlkaXNMaXRlOjp2aXJpZGlzKDYpLAogICAgdmFsdWVzID0gYygwLCAwLjY1LCAwLjc1LCAwLjg1LCAwLjk1LCAxKSwKICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gNDApKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgImJsYWNrIiwgImJsYWNrIiwgImdyYXk2MCIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KAogICAgICAjIGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxLAogICAgICBhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSwKICAgICAgc2l6ZSA9IHNpemVfZnVuKGNvbmdfYWxsX29yZGVyZWQkbGFiX0EsIHNpemVzID0gYygyMCwgMTQpKSwKICAgICAgY29sb3IgPSBjb2xvcl9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgY29sb3JfbGlzdCA9IGNvbmdfcGxvdF9jb2xvcnMpLAogICAgICBmYWNlICA9IGZhY2VfZnVuKGNvbmdfYWxsX29yZGVyZWQkbGFiX0EpKSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KAogICAgICBzaXplID0gcmV2KHNpemVfZnVuKGNvbmdfYWxsX29yZGVyZWQkbGFiX0EsIHNpemVzID0gYygyMCwgMTQpKSksCiAgICAgIGNvbG9yID0gcmV2KGNvbG9yX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BLCBjb2xvcl9saXN0ID0gY29uZ19wbG90X2NvbG9ycykpLAogICAgICBmYWNlICA9IHJldihmYWNlX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BKSkpLAogICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMCksCiAgICAjIGF4aXMudGlja3MgPSBlbGVtZW50X2xpbmUoc2l6ZSA9IDAuNSksCiAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2xpbmUoCiAgICAgIHNpemUgPSBzaXplX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BLCBzaXplcyA9IGMoMS41LCAwLjUpKSwKICAgICAgY29sb3IgPSBjb2xvcl9mdW4oY29uZ19hbGxfb3JkZXJlZCRsYWJfQSwgY29sb3JfbGlzdCA9IGNvbmdfcGxvdF9jb2xvcnMpKSwKICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfbGluZSgKICAgICAgc2l6ZSA9IHJldihzaXplX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BLCBzaXplcyA9IGMoMS41LCAwLjUpKSksCiAgICAgIGNvbG9yID0gcmV2KGNvbG9yX2Z1bihjb25nX2FsbF9vcmRlcmVkJGxhYl9BLCBjb2xvcl9saXN0ID0gY29uZ19wbG90X2NvbG9ycykpKSwKICAgIGF4aXMudGlja3MubGVuZ3RoID0gdW5pdCgwLjI1LCAiY20iKSkgKwogIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMLCBmaWxsID0gZXhwcmVzc2lvbihpdGFsaWMocltjXSkpKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnMDJfZHJvcF9zdWJqZWN0cy5wbmciKQpgYGAKCiMjIERldmVsb3BtZW50YWwgY29tcGFyaXNvbnMKCmBgYHtyIGRldiBjb21wIGFsbCBzaXRlcywgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDEuMn0KIyBGSUdVUkUgUzUsIEZJR1VSRSBTNiwgRklHVVJFIFM3LCBGSUdVUkUgUzgsIEZJR1VSRSBTOQpwbG90X2dyaWQoaGVhdG1hcF9jb21wX2Z1bihlZmFfbGlzdCA9IGxpc3QoZWZhX3VzX2FkdWx0cywgZWZhX3VzX2NoaWxkcmVuKSwgcGFkZGluZyA9IEYpLAogICAgICAgICAgZGV2X2NvbmdfcGxvdF9mdW4oY29uZ19kZl9jaGlsZHJlbiwgd2hpY2hfY291bnRyeSA9ICJVUyIsIHBhZGRpbmcgPSBUKSwKICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMiwgMS41KSwgbGFiZWxzID0gIkFVVE8iKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnUzA1X2Ryb3Bfc3ViamVjdHMucG5nIikKCnBsb3RfZ3JpZChoZWF0bWFwX2NvbXBfZnVuKGVmYV9saXN0ID0gbGlzdChlZmFfZ2hfYWR1bHRzLCBlZmFfZ2hfY2hpbGRyZW4pLCBwYWRkaW5nID0gRiksCiAgICAgICAgICBkZXZfY29uZ19wbG90X2Z1bihjb25nX2RmX2NoaWxkcmVuLCB3aGljaF9jb3VudHJ5ID0gIkdoYW5hIiwgcGFkZGluZyA9IFQpLAogICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygyLCAxLjUpLCBsYWJlbHMgPSAiQVVUTyIpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWdTMDZfZHJvcF9zdWJqZWN0cy5wbmciKQoKcGxvdF9ncmlkKGhlYXRtYXBfY29tcF9mdW4oZWZhX2xpc3QgPSBsaXN0KGVmYV90aF9hZHVsdHMsIGVmYV90aF9jaGlsZHJlbiksIHBhZGRpbmcgPSBGKSwKICAgICAgICAgIGRldl9jb25nX3Bsb3RfZnVuKGNvbmdfZGZfY2hpbGRyZW4sIHdoaWNoX2NvdW50cnkgPSAiVGhhaWxhbmQiLCBwYWRkaW5nID0gVCksCiAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDIsIDEuNSksIGxhYmVscyA9ICJBVVRPIikKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MwN19kcm9wX3N1YmplY3RzLnBuZyIpCgpwbG90X2dyaWQoaGVhdG1hcF9jb21wX2Z1bihlZmFfbGlzdCA9IGxpc3QoZWZhX2NoX2FkdWx0cywgZWZhX2NoX2NoaWxkcmVuKSwgcGFkZGluZyA9IEYpLAogICAgICAgICAgZGV2X2NvbmdfcGxvdF9mdW4oY29uZ19kZl9jaGlsZHJlbiwgd2hpY2hfY291bnRyeSA9ICJDaGluYSIsIHBhZGRpbmcgPSBUKSwKICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMiwgMS41KSwgbGFiZWxzID0gIkFVVE8iKQpnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnUzA4X2Ryb3Bfc3ViamVjdHMucG5nIikKCnBsb3RfZ3JpZChoZWF0bWFwX2NvbXBfZnVuKGVmYV9saXN0ID0gbGlzdChlZmFfdnRfYWR1bHRzLCBlZmFfdnRfY2hpbGRyZW4pLCBwYWRkaW5nID0gRiksCiAgICAgICAgICBkZXZfY29uZ19wbG90X2Z1bihjb25nX2RmX2NoaWxkcmVuLCB3aGljaF9jb3VudHJ5ID0gIlZhbnVhdHUiLCBwYWRkaW5nID0gVCksCiAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDIsIDEuNSksIGxhYmVscyA9ICJBVVRPIikKZ2dzYXZlKCIuLi9maWd1cmVzL2ZpZ1MwOV9kcm9wX3N1YmplY3RzLnBuZyIpCmBgYAoKYGBge3IgbG9hZGluZ3MgYWxsIHNhbXBsZXMsIGZpZy53aWR0aCA9IDYuNSwgZmlnLmFzcCA9IDAuNn0KIyBGSUdVUkUgMQpoZWF0bWFwX2NvbXBfZnVuKGxpc3QoZWZhX3VzX2FkdWx0cywgZWZhX2doX2FkdWx0cywgZWZhX3RoX2FkdWx0cywgCiAgICAgICAgICAgICAgICAgICAgICBlZmFfY2hfYWR1bHRzLCBlZmFfdnRfYWR1bHRzLCAKICAgICAgICAgICAgICAgICAgICAgIGVmYV91c19jaGlsZHJlbiwgZWZhX2doX2NoaWxkcmVuLCBlZmFfdGhfY2hpbGRyZW4sIAogICAgICAgICAgICAgICAgICAgICAgZWZhX2NoX2NoaWxkcmVuLCBlZmFfdnRfY2hpbGRyZW4pLCAKICAgICAgICAgICAgICAgICBmYWNldF9vcmRlcl92YXJzID0gYygiYWdlX2dyb3VwIiwgImNvdW50cnkiLCAiZm51bSIpLAogICAgICAgICAgICAgICAgIGZhY2V0X2xhYl9zcGxpdCA9IFQpICsKICB0aGVtZShwYW5lbC5zcGFjaW5nLnggPSB1bml0KGMocmVwKDAuMiwgNCksIDEsIHJlcCgwLjI1LCA0KSksICJsaW5lIiksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG9yYmFyKGJhcndpZHRoID0gMzAsIGJhcmhlaWdodCA9IDAuNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJGYWN0b3IgbG9hZGluZyIsIHRpdGxlLnZqdXN0ID0gMSkpCmdnc2F2ZSgiLi4vZmlndXJlcy9maWcwMV9kcm9wX3N1YmplY3RzLnBuZyIpCmBgYAoKYGBge3IgZG9taW5hbnQgZmFjdG9yLCBmaWcud2lkdGggPSA2LjUsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBGfQojIGhpZ2hsaWdodGluZyBkb21pbmFudCBmYWN0b3IgKGlnbm9yaW5nIGNyb3NzLWxvYWRpbmdzID4gMC4wNSkKbG9hZGluZ3NfYWxsIDwtIGxvYWRpbmdzX2FkdWx0cyAlPiUKICBzZWxlY3QoLWNvbnRhaW5zKCJvcmQiKSkgJT4lCiAgZnVsbF9qb2luKGxvYWRpbmdzX2NoaWxkcmVuICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtY29udGFpbnMoIm9yZCIpKSkKCmRvbV9mYWN0b3JzX2FsbCA8LSBsb2FkaW5nc19hbGwgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSwgYWdlX2dyb3VwLCBjYXBhY2l0eSkgJT4lIAogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdChjb3VudHJ5LCBhZ2VfZ3JvdXAsIGNhcGFjaXR5LCBmYWN0b3IsIGxvYWRpbmcpICU+JQogIHJlbmFtZShkb21fZmFjdG9yID0gZmFjdG9yLAogICAgICAgICBkb21fbG9hZGluZyA9IGxvYWRpbmcpCgpyZWN0X2RmIDwtIGxvYWRpbmdzX2FsbCAlPiUKICBmdWxsX2pvaW4oZG9tX2ZhY3RvcnNfYWxsKSAlPiUKICBtdXRhdGUoZm51bSA9IGdzdWIoIi4qX0YiLCAiRiIsIGZhY3RvcikpICU+JQogIHNlbGVjdCgtc3RhcnRzX3dpdGgoImZhY3RvciIpKSAlPiUKICBzcHJlYWQoZm51bSwgbG9hZGluZykgJT4lCiAgbXV0YXRlKGRpZmYxID0gYWJzKGRvbV9sb2FkaW5nKSAtIGFicyhGMSksCiAgICAgICAgIGRpZmYyID0gYWJzKGRvbV9sb2FkaW5nKSAtIGFicyhGMiksCiAgICAgICAgIGRpZmYzID0gYWJzKGRvbV9sb2FkaW5nKSAtIGFicyhGMyksCiAgICAgICAgIGRpZmY0ID0gYWJzKGRvbV9sb2FkaW5nKSAtIGFicyhGNCkpICU+JQogIHNlbGVjdCgtYyhkb21fbG9hZGluZywgc3RhcnRzX3dpdGgoIkYiKSkpICU+JQogIGdhdGhlcih3aGljaF9kaWZmLCBkaWZmLCBzdGFydHNfd2l0aCgiZGlmZiIpKSAlPiUKICBmaWx0ZXIoZGlmZiAhPSAwLCAhaXMubmEoZGlmZikpICU+JQogIGdyb3VwX2J5KGNvdW50cnksIGFnZV9ncm91cCwgY2FwYWNpdHkpICU+JQogIHRvcF9uKC0xLCBkaWZmKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGFueV9zbWFsbCA9IGRpZmYgPCAwLjA1KSAlPiUKICByZW5hbWUoZmFjdG9yID0gZG9tX2ZhY3RvcikgJT4lCiAgbGVmdF9qb2luKGZ1bGxfam9pbihmYWN0b3JfbmFtZXNfYWR1bHRzLCBmYWN0b3JfbmFtZXNfY2hpbGRyZW4pKQoKIyBhbmFsb2cgdG8gRklHVVJFIDEKdGVtcF9jYXBfb3JkZXIgPC0gZmEuc29ydChlZmFfdXNfYWR1bHRzKSRsb2FkaW5nc1tdICU+JSByb3duYW1lcygpICU+JSByZXYoKQoKZ2dwbG90KHJlY3RfZGYgJT4lCiAgICAgICAgIGZpbHRlcighaXMubmEoYW55X3NtYWxsKSkgJT4lCiAgICAgICAgIG11dGF0ZShjYXBhY2l0eSA9IGZhY3RvcihjYXBhY2l0eSwgbGV2ZWxzID0gdGVtcF9jYXBfb3JkZXIpKSwKICAgICAgIGFlcyh4ID0gZmFjdG9yX2xhYmRlc2NyaXB0LCAKICAgICAgICAgICB5ID0gY2FwYWNpdHksIAogICAgICAgICAgIGZpbGwgPSBhbnlfc21hbGwpKSArCiAgZmFjZXRfZ3JpZCh+IGludGVyYWN0aW9uKGNvdW50cnksIGFnZV9ncm91cCksIHNwYWNlID0gImZyZWUiLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3RpbGUoKSArCiAgdGhlbWUocGFuZWwuc3BhY2luZy54ID0gdW5pdChjKHJlcCgwLjIsIDQpLCAxLCByZXAoMC4yNSwgNCkpLCAibGluZSIpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikKIyBnZ3NhdmUoIi4uL2ZpZ3VyZXMvZmlnMDF2Ml9kcm9wX3N1YmplY3RzLnBuZyIpCmBgYAoK